Kann mir bitte jemand sagen, warum Swift den Setter einer Eigenschaft aufrufen muss, wenn es nur für den Zugriff auf ein Objekt (ein Protokoll) verwendet wird, um eine seiner Eigenschaften festzulegen? Dieses erste Beispiel zeigt den Fehler ich, wenn ich das indirekte Objekt als einstellbares nicht erklären kann:Swift-Protokoll einstellbare Eigenschaft durch eine schreibgeschützte Eigenschaft
protocol AProtocol {
var name: String { get set }
}
class AnImplementation: AProtocol {
var name = ""
}
class AParent {
var test = AnImplementation()
}
class AChild {
var parent: AParent!
var test: AProtocol {
get { return parent.test }
// Note: Not settable
}
}
var parent = AParent()
var child = AChild()
child.parent = parent
child.test.name = "Hello world!" // Error: Cannot assign to property : 'test' is a get-only property
print(child.test.name)
Wenn ich ihm einen Setter geben, es kompiliert und funktioniert, aber es ruft den Setzer:
protocol AProtocol {
var name: String { get set }
}
class AnImplementation: AProtocol {
var name = ""
}
class AParent {
var test = AnImplementation()
}
class AChild {
var parent: AParent!
var test: AProtocol {
get { return parent.test }
set(newTest) { print("Shouldn't be here!") }
}
}
var parent = AParent()
var child = AChild()
child.parent = parent
child.test.name = "Hello world!"
print(child.test.name)
Ausgang ist:
Shouldn't be here!
Hello world!
ich bin nicht sicher, was ich hier nicht zu verstehen. Ich nehme an, ich kann es einfach einen leeren Setter geben, aber ich würde gerne den Grund dafür verstehen.
Alle Informationen werden sehr geschätzt!
Auf Werttyp Setter, siehe zum Beispiel meine Antwort hier: http://StackOverflow.com/A/33901138/341994 – matt