La classe A fornisce un valore stringa. La classe B ha due membri di tipo A dentro se stessa e fornisce una proprietà calcolata "v" per sceglierne uno.Swift: impossibile assegnare un valore a una proprietà del protocollo?
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
}
}
}
Questo codice è semplice e funziona. Dal momento che entrambi i terminali A e B hanno un "valore" membro, mi fanno un protocollo come questo:
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
}
}
}
Se cambio il seguente codice
v.value = newValue
a
var v = self.v
v.value = newValue
E ' funziona di nuovo!
Si tratta di un bug di Swift o qualcosa di speciale per la proprietà dei protocolli?
Bella risposta e grazie. –