Aar*_*her 10 initialization subclass swift
以下是操场上的示例代码.我不明白的是为什么b子类中的变量必须是var类型而不能是let.有人可以帮我理解吗?
class Base1 {
init() { }
}
class Sub1: Base1 {
let b: Int
override init() {
super.init()
}
convenience init(b: Int) {
self.b = b // Cannot assign to property: 'b' is a 'let' constant
self.init()
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这与子类化的关系较小,而与类初始化程序的关系较大。
错误只说明了一半,b从更改let为var会显示此类的其他问题:
初始化程序必须为该类的每个存储属性设置一个初始值。如果覆盖init,则必须提供的默认值b。
便利初始化程序必须在访问之前调用指定的初始化程序 self
这是它的外观(感谢马丁·R代表就如何保持意见提出的改进b为let常数):
class Base1 {
init() { }
}
class Sub1: Base1 {
let b: Int
convenience override init() {
self.init(b: 5)
}
init(b: Int) {
self.b = b
super.init()
}
}
let one = Sub1(b: 10)
one.b // prints 10
let two = Sub1()
two.b // prints 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |