Swift关键知识点9-属性
00 分钟
2023-9-12
  • 属性:stored properties存储值(只支持类和结构体),computed properties支持类、结构体和枚举类。
  • 属性可以与实例或者类型本身关联
  • 可以定义property observers来观察属性值变化,可以作用于stored property,或者继承了父类属性的子类。
  • 可以定义一个property wrapper来重用getter和setter代码。
  • 结构体实例常量的stored properties:如果一个结构体实例被赋予给一个常量,那么这个实例的属性就不能被修改,即使这个属性被声明为变量。这是因为结构体是value type,赋值时所有值包括属性会被固定。
  • Lazy Stored Properties:第一次被使用时才计算值。lazy stored properties只能被声明为变量,因为常量需要在初始化完成之前就有值。适用于初始化需要依赖于外部值且该值初始化后也可能未知或者初始值需要很高的开销或者复杂的计算才能获取的情况。如果一个被lazy修饰的属性同时被多线程访问且还未初始化,那么将不能保证仅初始化一次。
  • 计算属性:不保存值,而是通过getter和可选的setter来获取和更新值。
  • Setter与getter简便写法:如果setter要修改的变量没有写名字,可以用newValue代替。getter如果返回的结果只是一行表达式,可以省略return。
  • 只读计算字段:只有getter没有setter的计算字段,可以省略get关键字
  • Property  Observers:在每次property被set时被调用,即使set的值与当前值相同。可以给你定义的stored property,继承的stored property或者继承的计算属性设置observers。对于你定义的计算属性,在setter中对值的改变进行响应而不需要设置observers。willSet在值被存储之前被调用,didSet在新的值被存储时被调用。willSet默认把属性命名为一个叫newValue的常量,didSet默认把旧的属性值命名为一个叫oldValue的常量。
  • Property Wrapper:用于区隔存储和定义属性的代码,如一些属性需要写入数据库,可以把写数据库的代码写成一个property wrapper,给各个属性复用。
  • 为property wrapper设置初始值
  • 在property wrapper中映射值
  • 类型属性:定义属于类型的属性,不管创建多少实例,都只有一份类型属性。存储类型属性可以是变量或者常量且必须提供一个默认值,计算类型属性只能是变量。使用static关键字来标识类型属性。
  • 获取和设置类型属性
 

评论