A 类提供一个字符串值。B 类内部有两个 A 类型的成员,并提供一个计算属性“v”来选择其中一个。
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
}
}
}
这段代码很简单,而且很有效。由于 A 和 B 都有一个成员“值”,因此我将其设为这样的协议:
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
}
}
}
如果我更改以下代码
v.value = newValue
至
var v = self.v
v.value = newValue
它再次起作用!
这是 Swift 的错误,还是协议属性的特殊情况?