swift中的didSet和willSet的变量不可以在init中调用

swift中的didSet和willSet使用过程中需要注意的地方:
将下面的这段代码放在Xcode的Storyboard中,观察name和nickName中print的数据

import UIKit
class Manager {
    private var _nickName: String = ""
    var name: String? = nil { //这里有没有 “= nil” 都是一样的效果
        didSet {
            print(name)
        }
    }
    
    var nickName: String {
        set {
            _nickName = newValue
            print(newValue)
        }
        get {
            return _nickName
        }
    }
    
    init(name: String, nickName: String) {
        self.name = name
        self.nickName = nickName
        updateName("function setting name")
        updateNickName("function setting nickname")
    }
    
    func updateName(name: String) {
        self.name = name
    }
    
    func updateNickName(nickName: String) {
        self.nickName = nickName
    }
}

let manager = Manager(name: "init setting name", nickName: "init setting nickname")
manager.name = "instance setting name"
manager.nickName = "instance setting nickname"

NOTE

The willSet and didSet observers of superclass properties are called when a property is set in a subclass initializer, after the superclass initializer has been called. They are not called while a class is setting its own properties, before the superclass initializer has been called.

Apple doc:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-XID_368

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容