结构体
在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分
比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体
① struct Date {
② var year: Int
③ var month: Int
④ var day: Int
⑤ }
⑥ var date = Date(year: 2019, month: 6, day: 23)
所有的结构体都有一个编译器自动生成的初始化器(initializer,初始化方法、构造器、构造方法)
在第⑥行调用的,可以传入所有成员值,用以初始化所有成员(存储属性,Stored Property)
- 结构体的初始化器
// 结构体的初始化器
// 编译器会根据情况,可能会为结构体生成多个初始化器,宗旨是:保证所有成员都有初始值
// 思考:下面代码能编译通过么?
struct Point {
var x: Int?
var y: Int?
}
var p1 = Point(x: 10, y: 10)
var p2 = Point(y: 10)
var p3 = Point(x: 10)
var p4 = Point()
// 可选项都有个默认值nil
// 因此可以编译通过
// 自定义初始化器
// 一旦在定义结构体时自定义了初始化器,编译器就不会再帮它自动生成其他初始化器
// 以下2段代码完全等效
struct Point {
var x: Int = 0
var y: Int = 0
}
var p = Point()
struct Point {
var x: Int
var y: Int
init() {
x = 0
y = 0
}
}
var p = Point()
- 结构体内存结构
// 结构体内存结构
struct Point {
var x: