1.存储属性
- 存储属性是一个作为特定类和结构体实例一部分的常量或变量。存储属性要么是变量存储属性 (var)要么是常量存储属性(let)。下面主要说下二者的区别:
- 从汇编的⻆度 其实两者是没有区别的


- 从sil的⻆度 清楚的看出 区别是一个有set另一个没有set方法

2.计算属性
- 存储的属性是最常⻅的,除了存储属性,类、结构体和枚举也能够定义计算属性,计算属性并不 存储值,他们提供 getter 和 setter 来修改和获取值。对于存储属性来说可以是常量或变量,但计算属性必须定义为变量。于此同时我们书写计算属性时候必须包含类型,因为编译器需要知道期望返回值是什么,最后从sil分析计算属性的本质就是get和set方法。
struct square{
var width: Double
var area: Double{
get{
return width * hegith
}
set{
self.width = newValue
}
}
}
3.属性观察者
- 属性观察者会观察用来观察属性值的变化,一个willSet当属性将被改变调用,即使这个值与原有的值相同,而didSet在属性已经改变之后调用。它们的语法类似于 getter 和 setter。

4.延迟存储属性
- 延迟存储属性的初始值在其第一次使用时才进行计算。
- 用关键字 lazy 来标识一个延迟存储属性

5.类型属性
- 类型属性其实就是一个全局变量 用static修饰
- 类型属性只会被初始化一次 本质如下

- 那么swift的单例怎么写呢 private有点oc绝对单例的意思
