habe ich dieses Verhalten beobachtet, das ich nicht ganz verstehe. Wenn Sie diesen Code auf einem Spielplatz Ausführung:willSet/didSet für die gespeicherte Eigenschaft eines Containers aufgerufen x Beim Festlegen einer Eigenschaft von x
protocol Testp {
var notes: String { get set }
}
class Testc: Testp {
var notes: String = "x"
}
class TestContainer {
var test: Testp = Testc() {
willSet {
print("willSet")
}
didSet {
print("didSet")
}
}
}
var testContainer = TestContainer()
print(testContainer.test.notes) // prints "x"
// this triggers a willSet+didSet call on TestContainer's
// stored property, even though "test" is not changed in testContainer
testContainer.test.notes = "y"
print(testContainer.test.notes) // prints "y"
Wie oben ausgeführt, werden die willSet
und didSet
Blöcke genannt, obwohl die Eigenschaft selbst nicht gesetzt werden.
Auf der anderen Seite, wenn ich das Protokoll zu der Typklasse ändern
protocol Testp: class {
var notes: String { get set }
}
das Ergebnis ist, wie ich es sein (das heißt kein Aufruf zu willSet/didSet
) folgt dann erwarten würde.
Was ist der Grund für dieses Verhalten?
Ich führe dies auf XCode 7.3.
Update: Noch in XCode 9.2/Swift 4
Haben Sie das jemals gelöst? Das gleiche Problem sehen. – tombardey
Ich bin egoistisch glücklich, endlich jemanden zu sehen, der in einem Kontext endet, wo dies Probleme verursacht;) Entschuldigung, aber nein, ich habe das nie anders gelöst, als die Dinge anders zu machen. – CMont