willSet и didSet

swift3

#1

Можете подробно объяснить вот следующий код, особенно didSet и willSet

    class SecretLabEmployee {

  var accessLevel = 0 {
    
    willSet(newValue) {
      print("new boss is about to come")
      print("new access level is \(newValue)")
    }
    
    didSet {
      if accessLevel > 0 {
        accessToDB = true
      } else {
        accessToDB = false
      }
      print("new boss just come")
      print("last time I had access level \(oldValue)")
    }
  }
  var accessToDB = false
}

let employee = SecretLabEmployee()
employee.accessLevel
employee.accessToDB

employee.accessLevel = 1
employee.accessToDB

спасибо


#2

willSet срабатывает перед тем как будет установлено новое значение, и ты даже можешь знать какое по переменной newValue
didSet срабатывает тогда. когда новое значение уже установлено!тут ты можешь получить доступ и к уже установленному значению, так и к старому по переменной oldValue
например если в твоем коде где

var accessLevel = 0

внизу написать

accessLevel = 1

то сначала сработает

willSet //  accessLevel = 0,  newValue  = 1,

а потом

didSet  //  accessLevel = 1,  oldValue  = 0