1、类和结构体的定义
<pre name="code" class="html">struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? //值为可选String类型的name }
类:关键字class, struct:结构体
2、创建类和结构体的实例(其他语言中称实例为对象。)
let someResolution = Resolution() let someVideoMode = VideoMode()
咦,很简单啊,怎么没有关键字new呢。。。。 和将函数赋值给变量是一样的啊。是的。就这么简单。无需关键字。
3、结构体有一个逐属性构造器,类木有。
let vga = Resolution(width:640,height: 480)
someVideoMode.resolution.width = 1280
5、结构体是值类型,类是引用类型。
6、类的恒等运算符 等价于(===),不等价于(!==)判断两个变量或常量是否引用了同一个实例
7、指针无需特定的(*)来表示是一个内存地址引用,也不需要特定的符号(->)来访问,它和访问属性是一样的 用 (.)点。
8、类和结构体的区别
Swift 中类和结构体有很多共同点。共同处在于:
与结构体相比,类还有如下的附加功能:
- 继承允许一个类继承另一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 解构器允许一个类实例释放任何其所被分配的资源
- 引用计数允许对一个类的多次引用
9、类和结构体的选择
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
- 结构体的主要目的是用来封装少量相关简单数据值。
- 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
- 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
- 结构体不需要去继承另一个已存在类型的属性或者行为。
合适的结构体候选者包括:
- 几何形状的大小,封装一个
width
属性和height
属性,两者均为Double
类型。 - 一定范围内的路径,封装一个
start
属性和length
属性,两者均为Int
类型。 - 三维坐标系内一点,封装
x
,y
和z
属性,三者均为Double
类型。
在所有其它案例中,定义一个类,生成一个它的实例,并通过引用来管理和传递。实际中,这意味着绝大部分的自定义数据构造都应该是类,而非结构体。
原文链接:https://www.f2er.com/swift/326417.html