美文网首页swift
Swift Day08 属性

Swift Day08 属性

作者: 望穿秋水小作坊 | 来源:发表于2020-12-03 22:01 被阅读0次

    一、属性

    1. Swift 中跟实例相关属性分为哪两类?分别有什么特点(各说三点)?
    • 存储属性(Stored Property)
    • 类似于成员变量这个概念
    • 存储在实例的内存中
    • 结构体、类可以定义存储属性
    • 枚举不可以定义存储属性
    • 计算属性(Computed Property)
    • 本质就是方法(函数)
    • 不占用实例的内存
    • 枚举、结构体、类都可以定义计算属性
    2. 为什么枚举不能定义存储属性
    • 因为枚举实例中要么存储原始值,要么存储关联值,没有位置放存储属性。
    3. 计算属性的本质是什么?等价于给我们生成哪两个方法?
    • 本质就是函数
    • 等价于生成了 setXxx() 和 getXxx()
    图示
    4. 使用汇编观察上面图示中代码的 radius 和 diameter 设置值的时候,分别对应的汇编代码长什么样?
    汇编观察
    • 可以看出:存储属性赋值是直接对相应的内存地址赋值
    • 计算属性赋值,是 setter 方法的调用
    5. 思考为什么存储属性必须设置一个初始值?
    • 这是 swift 对存储属性的明确规定
    • 因为实例对象的内存里面就是存放着存储属性,本质上 swift 想保证实例对象的内存存的值是明确的
    6. 为什么计算属性不能用 let 的修饰,只能用 var?
    • 计算属性的值是可能发生变化的,依赖于其他属性计算所得,所以不能 let 修饰
    7.学到这里,我们可以想清楚 枚举的 rawValue 到底是怎么办到返回原始值的吗?
    只读计算属性
    8. 延迟存储属性如何定义?有什么特点和注意点?(各说一个)
    延迟存储属性
    9. 什么样的属性可以设置属性观察器?如何设置属性观察器?
    属性观察器
    10. inout 对计算属性、观察属性、一般存储属性分别有什么效果?或者说编译器是如何处理的?
    inout 本质
    11. 什么是类型属性?和存储实例属性对比?如何定义类型属性?
    类型属性
    12. 类型属性的最近使用场景是什么?有什么优点?
    • 单例


      单例
    • 延迟加载

    • 线程安全

    • 保证永远只有一份

    • 不可修改

    相关文章

      网友评论

        本文标题:Swift Day08 属性

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