2014-08-28 15 views

Antwort

12

Ja, willeSet und didSet werden auch bei Einstellung auf den gleichen Wert aufgerufen. Getestet habe ich es auf einem Spielplatz:

class Class1 { 
    var willSetCount = 0 
    var didSetCount = 0 
    var var1: String = "A" { 
     willSet { 
      willSetCount++ 
     } 
     didSet { 
      didSetCount++ 
     } 
    } 
} 

let aClass1 = Class1() // {0 0 "A"} 
aClass1.var1 = "A"  // {1 1 "A"} 
aClass1.var1 = "A"  // {2 2 "A"} 

Wenn Sie Nebenwirkungen nicht passiert verhindern wollen, wenn der gleiche Wert eingestellt wird, der Wert auf newValue/oldValue vergleichen kann:

class Class2 { 
    var willSetCount = 0 
    var didSetCount = 0 
    var var1: String = "A" { 
     willSet { 
      if newValue != var1 { 
       willSetCount++ 
      } 
     } 
     didSet { 
      if oldValue != var1 { 
       didSetCount++ 
      } 
     } 
    } 
} 

let aClass2 = Class2() // {0 0 "A"} 
aClass2.var1 = "A"  // {0 0 "A"} 
aClass2.var1 = "B"  // {1 1 "B"} 
7

Ja, es tut. Sie könnten eine Eigenschaft vom Typ haben, die nicht dem Equatable-Protokoll entspricht, und dann würde "gleicher Wert" keinen Sinn ergeben. willSet und didSet wird nicht nur aufgerufen, wenn der Wert innerhalb des Initialisierers gesetzt wird.

Verwandte Themen