Geçerli olarak ayarlanmış olan değere bir özellik değeri ayarlarsanız, isSet ve didSet aranacak mı? Bu işlevlerde meydana gelen yan etkilerin ne zaman olduğunu bilmek önemlidir.Bir özellik için aynı değeri ayarlamak hala setSet ve didSet'i çağırıyor mu?
7
A
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
- 1. Bir Vuejs girdisi hesaplanmış özellik değerini ayarlamak için hesaplama
- 2. Yöntem değeri ayarlamak için MethodInfo.Invoke nasıl kullanılır?
- 3. Özellik değerini ayarlamak için jQuery .attr veya .prop kullanma
- 4. özellik değeri değeri LXML
- 5. Tamamlandığında aynı animasyonu farklı değerlerle çağırıyor
- 6. Sözleşmeler için farklı özellik değeri
- 7. Özellik değeri için normal ifade
- 8. Çekirdek J2EE desenleri ve uygulamaları hala okumak için uygun mu?
- 9. Garip C# davranışı. Bir değeri ayarlamak iki
- 10. Wicket bağlantısı - metni ayarlamak için gerekli bir etiket ekliyor mu?
- 11. Farklı türde bir Listenin özellik değeri eşit olduğunda bir Listeden çıkarmak için Linq sorgusu mu?
- 12. . Net hala ADO.net kullanıyor mu?
- 13. Oracle BC4J Hala Destekleniyor mu?
- 14. başka özellik değeri
- 15. Özellik anahtarını kurtar/değeri
- 16. CollectionBase sınıfı hala destekleniyor mu?
- 17. polimorfik bir işlevi çağırıyor
- 18. Symfony'nin DomCrawler: Belirli özellik değeri
- 19. Geçersiz CRM 2011 LINQ Sorgusu: "Geçersiz" Burada bir koşul üyesi geçersiz bir özellik veya yöntem çağırıyor. "
- 20. Değişken'i Etkileşimli Olarak Ayarlamak İçin Listeden Değeri Kullanın
- 21. xml öğesinde bir özellik değeri alma
- 22. Belirli bir özelliğin özellik değeri alın
- 23. Nasıl casusluk gibi aynı şekil gibi UIbutton noktaları ayarlamak için
- 24. nasıl php seçme kutusu varsayılan değeri ayarlamak için
- 25. iTextSharp - Aynı hücre ve satır için farklı bir yazı tipi rengi ayarlamak mümkün mü?
- 26. Prism hala aktif olarak geliştiriliyor mu?
- 27. Bir değer almak ve ayarlamak için bir struct kullanma yolları?
- 28. dönüştürme dize değeri özellik adı itiraz
- 29. İfadeleri kullanarak özellik değeri nasıl ayarlanır?
- 30. JS değeri iletilemiyor mu?
Eğer denerseniz, ne olur? –
@MikePollard Soruyu sorduğumda cevabımı gönderdim. –