对比
相同点:
定义属性用来存储值;
定义方法用于提供功能;
定义下标脚本用来允许使用下标语法访问值;
定义初始化器用于初始化实例;
可以被扩展来实现默认所没有的功能;
遵循协议来针对特定类型提供标准功能。
不同点:
继承可以继承而结构体不可以;
类型转换允许你在运行检查和解释一个类实例的类型;
反初始化器允许一个类实例释放任何其所被分配的资源;
引用计数允许多个变量对同一个类实例进行引用。
结构体可以自动获得一个成员初始化器,而类不会有
struct Resolution {
var width = 0
var height = 0
}
let vga = Resolution(width: 640, height: 480)
类
1、使用 ===
和 !===
来判断两个对象是否引用同一个类对象
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
if tenEighty === alsoTenEighty {
print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// prints "tenEighty and alsoTenEighty refer to the same VideoMode instance."
2、Swift 的 String , Array 和 Dictionary类型是作为结构体来实现的,字符串,数组和字典在它们被赋值到一个新的常量或者变量,或者它们被传递到一个函数或方法中的时候,其实是传递了拷贝。
而 NSString, NSArray和 NSDictionary 实例总是作为一个已存在实例的引用而不是拷贝来赋值和传递