属性

Posted by Genie on June 26, 2020
  • 存储属性(Stored Properties)
  • 计算属性(Computed Properties)
  • 属性观察器(Property Observers)
  • 全局变量和局部变量(Global and Local Variables)
  • 类型属性(Type Properties)

计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体

存储属性(Stored Properties)

  • 变量存储属性 var

  • 常量存储属性 let

  • 常量结构体属性

1
2
3
struct FixedLengthRange {
    var firstValue: Int
    let length: Int

let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)

  • 延迟存储属性 lazy

计算属性(Computed Properties)

1
2
3
4
get {
}
set {
}

注意 必须使用 var 关键字定义计算属性,包括只读计算属性,因为它们的值不是固定的。let 关键字只用来声明常量属性,表示初始化后再也无法修改的值。

属性观察器(Property Observers)

  • willSet 在新的值被设置之前调用
  • didSet 在新的值被设置之后立即调用

注意

父类的属性在子类的构造器中被赋值时,它在父类中的 willSet 和 didSet 观察器会被调用,随后才会调用子类的观察器。在父类初始化方法调用之前,子类给属性赋值时,观察器不会被调用。

全局变量和局部变量(Global and Local Variables)

注意 全局的常量或变量都是延迟计算的,跟延迟存储属性相似,不同的地方在于,全局的常量或变量不需要标记lazy修饰符。 局部范围的常量或变量从不延迟计算。

类型属性(Type Properties)

使用关键字 static 来定义类型属性。在为类定义计算型类型属性时,可以改用关键字 class 来支持子类对父类的实现进行重写