我不明白此错误的含义。这就是我想要做的:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
我得到:
无法使用只读属性'testTitle'覆盖可变属性
您能帮我了解发生了什么吗?也许对某些人来说这是微不足道的,但对我而言却并非如此。
谢谢你的帮助。
您不能实现比基类更严格的子类(它只会反过来起作用)。因此,如果基类实现了读/写属性,则不能在派生类中将其设为只读。
因此:
final class TestViewController: MyViewController {
override var testTitle: String? { // No error occurs here
get {
return "Test"
}
set {
super.testTitle = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
该协议要求采用的类使用testTitlegetter 实现属性,但并不禁止使用 getter和setter声明属性。
要覆盖属性,您必须覆盖类中的(整个)签名,而不是协议要求。
正如testTitle声明为读/写一样,您不能将其覆盖为只读。
| 归档时间: |
|
| 查看次数: |
2213 次 |
| 最近记录: |