Swift'te willSet ve didSet'in amacı nedir?
Swift, C#'ninkine çok benzeyen bir özellik bildirimi sözdizimine sahiptir:
var foo: Int {
get { return getFoo() }
set { setFoo(newValue) }
}
Bununla birlikte, willSet
ve didSet
eylemlerine de sahiptir. Bunlar sırasıyla setter çağrılmadan önce ve sonra çağrılır. Aynı kodu setter içinde de kullanabileceğinizi düşünürsek, bunların amacı nedir?
256
3
Mesele şu ki, bazen otomatik depolama ve bazı davranışlara sahip bir özelliğe ihtiyaç duyarsınız, örneğin özelliğin değiştiğini diğer nesnelere bildirmek için. Elinizdeki tek şey
get
/set
olduğunda, değeri tutmak için başka bir alana ihtiyacınız olur. willSetve
didSet` ile, değer değiştirildiğinde başka bir alana ihtiyaç duymadan işlem yapabilirsiniz. Örneğin, bu örnekte:myProperty` her değiştirildiğinde eski ve yeni değerini yazdırır. Sadece getters ve setters ile bunun yerine buna ihtiyacım olacaktı:
Dolayısıyla
willSet
vedidSet
birkaç satırlık bir ekonomiyi ve alan listesinde daha az gürültüyü temsil eder.Bunlara Özellik Gözlemcileri denir:
Alıntı: Apple Inc. "Swift Programlama Dili." iBooks. https://itun.es/ca/jEUH0.l
Bunun geleneksel olarak KVO ile yaptığımız UI öğeleriyle veri bağlama veya bir özelliği değiştirmenin yan etkilerini tetikleme, bir senkronizasyon sürecini tetikleme, arka plan işleme vb. gibi şeylere izin verdiğinden şüpheleniyorum.
Getter ve setter bazen sadece uygun değer değişikliklerini gözlemlemek için uygulanamayacak kadar ağırdır. Genellikle bunun için ekstra geçici değişken kullanımı ve ekstra kontroller gerekir ve yüzlerce getter ve setter yazıyorsanız bu küçük işlerden bile kaçınmak isteyeceksiniz. Bu şeyler durum içindir.