swift属性

124 阅读1分钟

1.存储属性

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

截屏2022-01-05 下午5.19.37.png

截屏2022-01-05 下午5.19.26.png

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

截屏2022-01-05 下午5.21.34.png

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。

截屏2022-01-05 下午5.45.26.png

4.延迟存储属性

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

截屏2022-01-05 下午5.50.12.png

5.类型属性

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

截屏2022-01-05 下午6.05.17.png

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

截屏2022-01-05 下午6.07.25.png