有人可以告诉我为什么Swift必须调用一个属性的setter,当它仅用于访问一个对象(协议)以设置其属性之一时?第一个例子说明,如果我不申报的间接对象设定我的错误:如果我给它一个二传手通过只读属性的Swift协议可设置属性
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)
,它编译和作品,但它调用setter方法:
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)
输出:
Shouldn't be here!
Hello world!
我不知道我不理解这里。我想我可以给它一个空的二传手,但我想了解它的原因。
任何信息非常感谢!
关于值类型setters,请参阅我的答案在这里例如:http://stackoverflow.com/a/33901138/341994 – matt