“oldValue” and “newValue” default parameters names inside willSet / didSet unrecognized

后端 未结 6 1435
梦谈多话
梦谈多话 2021-02-06 21:44

I am currently writing Swift 3 code in Xcode 8.

When using oldValue and newValue default parameters inside the willSet and

相关标签:
6条回答
  • 2021-02-06 22:15

    You can also use vc:

    var vc:UIViewController? {
        willSet {
            print("New value is \(newValue) and old is \(vc)")
        }
        didSet {
            print("Old value is \(oldValue) and new is \(vc)")
        }
    }
    
    0 讨论(0)
  • 2021-02-06 22:17

    You didn't try to initialize the variable with a new object by which you can set your clojure:

    var vc:UIViewController? = UIViewController(){
       willSet { 
           print("Old value is \(oldValue)")
       }
       didSet(viewController) {
           print("New value is \(newValue)")
       }
    }
    
    0 讨论(0)
  • 2021-02-06 22:20

    It's important to know that the special variable newValue only works within willSet, while oldValue only works within didSet.

    var vc: UIViewController? {
        willSet {
            // Here you can use vc as the old value since it's not changed yet
            print("New value is \(newValue)")
        }
        didSet {
            // Here you can use vc as the new value since it's already DID set
            print("Old value is \(oldValue)") 
        }
    }
    
    0 讨论(0)
  • 2021-02-06 22:23
    var vc:UIViewController? {
        willSet {
            print("New value is \(newValue)")
        }
        didSet {
            print("Old value is \(oldValue)")
        }
    }
    
    0 讨论(0)
  • 2021-02-06 22:27

    The special variable newValue only works within willSet, while oldValue only works within didSet.

    The property as referenced by its name (in this example vc) is still bound to the old value within willSet and is bound to the new value within didSet.

    0 讨论(0)
  • 2021-02-06 22:33

    That's why we use NSKeyValueObservation to monitor class object

    0 讨论(0)
提交回复
热议问题