【swift-总结】结构体和类
2015-07-02 19:37
274 查看
结构体
结构体是值传递类型/** * 结构体 */ struct Resolution { var width = 0 var height = 0 } //把结构体的值赋值给一个常量 let resol = Resolution(width: 320, height: 480) //这句话会报错,因为resol是常量,所以里面的值不能修改,这就是值类型 resol.width = 20 //初始化结构体的时候要保证里面所有属性都有值 var res = Resolution(width: 320, height: 480) //如果属性有默认值的话可以这样初始化 res = Resolution() //因为结构体是值类型,所以这句话是拷贝,不是引用 var anotherRes = res //修改anotherRes的属性不会改变res的属性值 anotherRes.width = 380 res.width
类
/** * Person类有默认初始值 */ class Person { var name = "ttf" var age = 22 } //初始化 var p1 = Person() //因为类是引用传递,所以p2和p1是同一个对象 var p2 = p1 //改变p2属性的值也会改变p1的属性值 p2.name = "fft" p1.name //若果把类对象付给一个常量指针,还是可以改变里面的属性 //可以把p3看成是一个指针,他不能再指向别的对象 let p3 = Person() p3.age = 20 p3 = p2//错误,不能让p3指向别的对象 //===判断两个对象是不是同一个对象 //==判断两个对象的值是否相等 //!==判断两个对象是不相等 if(p1 === p2) { print("相等") }
什么时候用结构体
官方给出几个建议几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
三维坐标系内一点,封装x,y和z属性,三者均为Double类型。
集合类型的值传递问题
Swift 中字符串(String),数组(Array)和字典(Dictionary)类型均以结构体的形式实现。这意味着String,Array,Dictionary类型数据被赋值给新的常量(或变量),或者被传入函数(或方法)中时,它们的值会发生拷贝行为(值传递方式)。
Objective-C中字符串(NSString),数组(NSArray)和字典(NSDictionary)类型均以类的形式实现,这与Swfit中以值传递方式是不同的。NSString,NSArray,NSDictionary在发生赋值或者传入函数(或方法)时,不会发生值拷贝,而是传递已存在实例的引用。
相关文章推荐
- Swift 数组
- 【swift-总结】枚举
- OC代码转Swift代码
- swift语法初探 -- 1
- 【swift-总结】闭包
- OC移植 swfit——Unknown type name 'NSData'
- swift 创建cocoapod
- Swift, Playgrounds, and XCPlayground
- Swift开发学习(二):Playground
- Swift 2.0初探
- 进军swift
- Swift 学习笔记,UILabel自适应高度宽度
- swift学习笔记1
- Swift xcode 快捷键
- Swift 避免hardcode
- swift添加pod
- Swift 实现单例模式Singleton pattern的三种方法
- Ios Swift学习之一基础知识
- swift 可变参数
- Swift开发iOS app初学一周体会