Klasse A stellt einen Zeichenfolgenwert bereit. Klasse B hat zwei Mitglieder des A-Typs in sich selbst und stellt eine berechnete Eigenschaft "v" bereit, um eine von ihnen auszuwählen.Swift: Konnte Wert zu einer Eigenschaft des Protokolls nicht zuweisen?
class A {
var value: String
init(value: String) {
self.value = value
}
}
class B {
var v1: A?
var v2: A = A(value: "2")
private var v: A {
return v1 ?? v2
}
var value: String {
get {
return v.value
}
set {
v.value = newValue
}
}
}
Dieser Code ist einfach und es funktioniert. Da sowohl die A- und B ein Element "Wert" haben, mache ich es ein Protokoll wie folgt aus:
protocol ValueProvider {
var value: String {get set}
}
class A: ValueProvider {
var value: String
init(value: String) {
self.value = value
}
}
class B: ValueProvider {
var v1: ValueProvider?
var v2: ValueProvider = A(value: "2")
private var v: ValueProvider {
return v1 ?? v2
}
var value: String {
get {
return v.value
}
set {
v.value = newValue // Error: Cannot assign to the result of the expression
}
}
}
Wenn ich den folgenden Code ändern
v.value = newValue
zu
var v = self.v
v.value = newValue
Es funktioniert wieder!
Ist dies ein Fehler von Swift oder etwas Besonderes für die Eigenschaft von Protokollen?
Schöne Antwort und danke. –