swift-init方法中是否会触发属性观察者?

2021-02-25  本文已影响0人  GitArtOS

init方法中是否会触发属性观察者?

class GitArtOS{
    var content: String = "测试init方法中是否会触发属性观察者?"{
        //新值存储之前调用
        willSet{
            print("willSet newValue \(newValue)")
        }
        //新值存储之后调用
        didSet{
            print("didSet oldValue \(oldValue)")
        }
    }
    
    init() {
        self.content = "init方法中是否会触发属性观察者?"
    }
}

运行后发现:并没有打印输出,所以有以下结论

  1. init方法中,如果调用属性,并不会触发属性观察者
  2. init方法作用是初始化当前变量,为了程序正常运行,在确保变量没有初始化完成之前是不允许修改的,因为除了结构中默认的前16个字节,其他属性会调用memset清理内存空间(因为有可能被别人用过,是脏数据),最后才会赋值。

【总结】:init方法声明默认值时,都不会触发属性观察者


哪里可以添加属性观察者

  1. 结构体定义存储属性
  2. 通过结构体继承存储属性
  3. 通过结构体继承计算属性
上一篇 下一篇

猜你喜欢

热点阅读