我不明白此错误的含义。这就是我想要做的:
protocol P {
var testTitle: String? { get }
}
class MyViewController: UIViewController, P {
var testTitle: String? {
didSet {
self.title = testTitle
}
}
}
final class TestViewController: MyViewController {
var testTitle: String? { // Error occurs here
return "Test"
}
}
我得到了:
无法使用只读属性'testTitle'覆盖可变属性
您能帮助我了解发生了什么吗?也许对某些人来说是微不足道的,但对我而言却不是。
感谢您的帮助。
答案 0 :(得分:2)
该协议要求采用类通过getter实现属性testTitle
,但并非禁止使用getter 和 setter声明该属性。< / p>
要覆盖属性,您必须覆盖类中的(整个)签名,而不是协议要求。
由于testTitle
被声明为读/写,因此您不能将其重写为只读。
答案 1 :(得分:1)
您不能实现比基类更严格的子类(它只会反过来起作用)。因此,如果基类实现了read / write属性,则不能在派生类中将其设置为只读。
因此:
final class TestViewController: MyViewController {
override var testTitle: String? { // No error occurs here
get {
return "Test"
}
set {
super.testTitle = newValue
}
}
}