Wenn ich einen Eigenschaftswert auf den gleichen Wert setze, auf den er gerade eingestellt ist, werden willSet und didSet aufgerufen? Dies ist wichtig zu wissen, wann Nebenwirkungen in diesen Funktionen auftreten.Wird beim Einstellen des gleichen Werts für eine Eigenschaft immer noch "willSet" und "didSet" aufgerufen?
7
A
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
- 1. willSet/didSet für die gespeicherte Eigenschaft eines Containers aufgerufen x Beim Festlegen einer Eigenschaft von x
- 2. Wie verwendet man enums mit Property-Beobachtern (didSet, willSet)?
- 3. Warum schreibt eine schreibgeschützte Eigenschaft immer noch mit KVC
- 4. Ändern des Werts einer Maven-Eigenschaft beim Ersetzen
- 5. jQuery mousemove() wird aufgerufen, auch wenn die Maus immer noch
- 6. Select2 Erneute Auswahl des gleichen Werts zulassen
- 7. In Swift wird didset nicht ausgelöst, wenn es von init() aufgerufen wird
- 8. Fehler: WebView.destroy() aufgerufen, während immer noch
- 9. Indizierung/Performance-Strategien für große Menge des gleichen Werts
- 10. Warum ruft 'didset' eine Eigenschaft auf, wenn ich die Eigenschaft dieser Eigenschaft festlege?
- 11. AngularJS: Beobachten einer bestimmten Eigenschaft in einem Array von Objekten für Änderungen des Werts der Eigenschaft
- 12. XML Ändern des Werts der Namespace-Eigenschaft
- 13. Einstellen des ausgewählten Werts eines Select-Elements im Lenker
- 14. NullPointer Ausnahme beim Einstellen des Adapters für eine ListView
- 15. Wird BuildConfig.DEBUG immer noch abgehört?
- 16. Kann ich XAML verwenden, um eine verschachtelte Eigenschaft (Eigenschaft des Werts einer Eigenschaft) eines Steuerelements festzulegen?
- 17. Wird beim Einstellen des ausgewählten Elements einer UITabBar die tabBar aufgerufen: didSelectItem-Methode?
- 18. Multithreading-Problem beim Aktualisieren des Werts
- 19. Probleme beim Einstellen des Arbeitsverzeichnisses
- 20. Druckerfach beim Drucken des Excel-Dokuments einstellen
- 21. jquery deferred - "immer" beim ersten Reject aufgerufen
- 22. Keine Paketkennung beim Abrufen des Werts für die Ressourcennummer
- 23. Problem beim Einstellen der gleichen Start- und Endkoordinaten in Routing
- 24. Wird ein Zeiger auf eine virtuelle Funktion immer noch virtuell aufgerufen?
- 25. ValidationRule mit ValidationStep = "UpdatedValue" wird mit BindingExpression anstelle des aktualisierten Werts aufgerufen
- 26. Abrufen des JSON-Schlüssels und des Werts
- 27. Konvertierung fehlgeschlagen beim Konvertieren des Varchar-Werts
- 28. Warum wird mein Tag immer noch angezeigt?
- 29. Strings enthalten die gleichen Zeichen, aber sind immer noch unterschiedlich
- 30. Wird Cassandra jdbc immer noch aktiv unterstützt?
Was passiert, wenn Sie es versuchen? –
@MikePollard Ich habe meine Antwort geschrieben, als ich die Frage gestellt habe. –