美文网首页
为类、结构体以及枚举添加属性

为类、结构体以及枚举添加属性

作者: 一个栗 | 来源:发表于2021-10-05 17:45 被阅读0次

    常量结构体实例的存储属性

    • 如果你创建了一个结构体的实例并且把这个实例赋给常量,你不能修改这个实例的属性,即便是声明为变量的属性。

    延迟存储属性

    • 延迟存储属性的初始值在其第一次使用时才进行计算。你可以通过在其声明前标注 lazy 修饰语来表示一个延迟存储属性。
    • 如果被标记为 lazy 修饰符的属性同时被多个线程访问并且属性还没有被初始化,则无法保证属性只初始化一次。

    计算属性

    • 除了存储属性,类、结构体和枚举也能够定义计算属性,而它实际并不存储值。相反,它提供一个读取器和一个可选的设置器来间接得到和设置其他的属性和值。

    简写 setter

    • 如果一个计算属性的设置器没有为将要被设置的值定义一个名字,那么它将被默认命名为 newValue

    简写 getter

    • 如果整个 getter 的函数体是一个单一的表达式,那么 getter 隐式返回这个表达式。

    只读计算属性

    • 一个有读取器但是没有设置器的计算属性就是所谓的只读计算属性。只读计算属性返回一个值,也可以通过点语法访问,但是不能被修改为另一个值。
    • 你必须用 var 关键字定义计算属性(包括只读计算属性)为变量属性,因为它们的值不是固定的。let 关键字只用于常量属性,用于明确那些值一旦作为实例初始化就不能更改。

    属性观察者

    • willSet 会在该值被存储之前被调用
    • didSet 会在一个新值被存储后被调用
    • 如果你实现了一个 willSet 观察者,新的属性值会以常量形式参数传递。你可以在你的 willSet 实现中为这个参数定义名字。如果你没有为它命名,那么它会使用默认的名字 newValue。
    • 如果你实现了一个 didSet 观察者,一个包含旧值属性值的常量形式参数将会被传递。你可以为它命名,也可以使用默认的形式参数名 oldValue。如果你在属性自己的 didSet 观察者里给自己赋值,你赋值的新值就会取代刚刚设置的值。

    全局和局部变量

    • 观察属性的能力同样对全局变量和局部变量有效。全局变量是定义在任何函数、方法、闭包或者类型环境之外的变量。局部变量时定义在函数、方法或者闭包环境之中的变量。

    类型属性

    • 使用 static 关键字来定义类型属性。对于类类型的计算属性类型,你可以使用 class 关键字来允许子类重写父类的实现。

    相关文章

      网友评论

          本文标题:为类、结构体以及枚举添加属性

          本文链接:https://www.haomeiwen.com/subject/upribltx.html