2014-08-28 7 views

cevap

12

Evet, willSet ve didSet, aynı değere ayarlandığında bile çağrılır. Ben bir oyun içinde test: Eğer değer karşılaştırabilirsiniz

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"} 

aynı değeri ayarlanırken zaman meydana gelmesini yan etkileri önlemek istiyorsanız

, newValue/OLDVALUE:

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

Evet, öyle. Equatable protokolüne uymayan bir türe sahip olabilirsiniz ve daha sonra "aynı değer" mantıklı olmaz. willSet ve didSet, yalnızca değer başlatıcı içinde ayarlandığında çağrılmaz.

İlgili konular