Swift类中的错误:在super.init调用时未初始化属性我有两节课,Shape和Squareclass Shape {
var numberOfSides = 0
var name: String
init(name:String) {
self.name = name }
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}}class Square: Shape {
var sideLength: Double
init(sideLength:Double, name:String) {
super.init(name:name) // Error here self.sideLength = sideLength
numberOfSides = 4
}
func area () -> Double {
return sideLength * sideLength }}通过上面的实现,我得到错误:property 'self.sideLength' not initialized at super.init call super.init(name:name)为什么我必须self.sideLength在打电话前设置super.init?
3 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
Swift具有在初始化器中完成的非常清晰,特定的操作序列。让我们从一些基本的例子开始,一直到一般情况。
我们来看一个对象A.我们将其定义如下。
class A { var x: Int init(x: Int) { self.x = x }}
请注意,A没有超类,因此它不能调用super.init()函数,因为它不存在。
好了,现在让我们用一个名为B的新类子类A.
class B: A { var y: Int init(x: Int, y: Int) { self.y = y super.init(x: x) }}
这与Objective-C不同,[super init]
后者通常首先被调用。斯威夫特不是这样。在执行任何其他操作之前,您有责任确保实例变量处于一致状态,包括调用方法(包括超类'初始化程序)。
- 3 回答
- 0 关注
- 1172 浏览
添加回答
举报
0/150
提交
取消