- 结构体会自动生成逐一构造器
- 枚举和结构体都是值类型,每次传递的时候都是拷贝。即后面的改变不影响之前的。
- 两个类实例指向同一个地址用 === 判断(等价于)。
- swift中数组,字典均为结构体,为值类型。
1.swift类和结构体有很多共同点:
- 定义属性用于存储值
- 定义方法用于提供功能
- 定义下标操作使得可以通过下标语法来访问实例所包含的值
- 定义构造器用于生成初始化值
- 通过扩展以增加默认功能的实现
- 实现协议已提供某种标准功能
与结构相比,类还有如下的附加功能:
- 继承允许一个类继承另外一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 析构器允许一个类实例释放任何其所被分配的资源
+引用计数允许对一个类的多次引用
(结构体总是通过复制的方式在代码)
2.类和结构体的定义方式
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
生成类或者结构体的实例用(),通过这种方法所创建的类或者结构体实例,其属性均会被初始化为默认值。
let x = VideoMode()
3.属性访问
通过.语法可以访问实例的属性。
print(x.frameRate)
结构体都有一个自动生成的成员逐一构造器。类没有。
let x = Resolution(width: 20, height: 20)
4.结构体和枚举是值类型
在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。
5.类是引用类型
let tenEighty = VideoMode()
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
这里alsoTenEighty是let修饰的,但是仍然可以修改属性frameRate,因为alsoTenEighty常量的值没有改变,只是改变了alsoTenEighty引用的frameRate的值,而frameRate是var修饰的。