目录
属性类型
-
存储属性
- 在类或者结构体中可以有储存属性;
- 属性中可以有属性观察器;
- 存储属性是存储到结构体或者类结构中的;
- 枚举中不能有存储属性, 因为枚举变量只能存储case...;
-
计算属性
- 计算属性的本质是生成对应的setter方法和getter方法;
- 计算属性中不能有属性观察器;
- 计算属性不存在成员变量, 存储在结构体或者类的结构中;
- 在类和结构体中可以有存储属性;
-
类型属性
- 类型属性全局只能有一份, 使用static修饰;
- 类型属性可以在类、结构体、枚举中声明;
- 类型属性不存储在类,结构体, 枚举结构中;
函数或者方法的 inout 参数
- inout参数的本质是引用传递;
- 如果传入的是存储属性, 且存储属性中没有属性观察器, 则传入的是该存储属性的地址;
- 如果传入的是存储属性, 且存储属性中属性观察器, 则传入的不是该存储属性的地址; 而是在调用函数之前先调用了该存储属性的willSet方法, 产生一个临时变量, 传入的是临时变量的地址, 函数调用结束的时候, 会将该临时变量的值赋值给回该该存储属性, 这时候就会触发didSet方法;
- 如果传入的是计算属性, 因为不存在该计算属性的成员变量, 而是调用了对应的getter方法, 产生一个临时变量, 再将临时变量传入到函数中, 函数调用结束, 再将临时变量通过该计算属性的setter方法, 赋值回对应的地方;
目录