为了账号安全,请及时绑定邮箱和手机立即绑定

Swift类中的错误:在super.init调用时未初始化属性

Swift类中的错误:在super.init调用时未初始化属性

慕标琳琳 2019-08-01 16:24:25
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]后者通常首先被调用。斯威夫特不是这样。在执行任何其他操作之前,您有责任确保实例变量处于一致状态,包括调用方法(包括超类'初始化程序)。


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 1172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信