我在操场上有这段代码:
protocol SettableName {
var name: String {get set}
}
struct SettableNameImpl: SettableName {
var actualName: String?
var name: String {
get {
if let name = actualName {
return name
} else {
return ""
}
}
set (newName) {
self.actualName = newName
}
}
}
struct Something {
var settable: SettableName
func setName(name: String) {
settable.name = name <-- "cannot assign to result of this expression"
}
}
我得到&#34;无法分配到这个表达式的结果&#34;在setName
方法中。我不能为我的生活理解为什么。
答案 0 :(得分:1)
通过更改Something
中可设置的name属性,您正在更改Something
本身的值,这就是为什么{name}功能之前必须放置mutating
关键字的原因。希望我很清楚。
struct Something {
var settable: SettableName
mutating func setName(name: String) {
settable.name = name // "error is gone now"
}
}