Swift 5 结构体与类
2019-10-08 本文已影响0人
鬼把戏
结构体: Bool、Int、Double、String、Array、Dictionary等常见的类型都是结构体
- 结构体都有一个编译器自动生成的的初始化器(initializer,初始化方法,构造器,构造方法)
- 编译器根据情况可能会为结构体生成g多个初始化器,保证所有成员都有初始值
- 定义结构体时在结构体内自定义了初始化器,编译器j就不会生成t其他的初始化器
- 内部内存结构是连续的,实际占用是成员的内存大小,分配的要看内存对齐
struct Point {
var x: Int
var y: Int = 1
var z: Int?
}
struct Point1 {
var x: Int
var y: Int
init() {
x = 0
y = 0
}
}
struct Point2 {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
类
- 类的定义与结构体类似,但编译器没有生成可以传入成员值得初始化器
- 类的所有成员在定义时指定了初始值,编译器会生成无参的初始化器,成员的初始化在这个初始化器中完成
结构体与类的区别
- 结构体是值类型(枚举也是),类是引用类型(指针类型)
值类型
- 值类型给 let、var 赋值或者给函数传参时,是直接将所有内容拷贝一份,属于深拷贝
- Swift 标准库中为了提升性能,String、Array、Dictionary、Set 采取 Copy On Write 的技术(仅当有"写"的操作时才会真的进行拷贝操作)
引用类型
- 引用类型给 let、var 赋值或者传参,是将储存的内存地址拷贝一份