在调用super.init()之前,不能在init()中放置Swift断言

时间:2015-08-20 08:39:51

标签: swift assert init swift2

我想在调用init()之前在super.init()内使用断言。它们用于在计算局部属性时检查某些不变条件。

但是,如果我尝试发出这样的断言,我会收到以下错误消息:

  

'自'在super.init调用之前使用

我认为这是因为assert打印了对象的描述,因此使用self,此时尚未完全初始化。我能做些什么(比如在调用super.init()之前计算局部属性并在那里放置断言)。

更新以下是一个简明示例:

class Test: NSObject {
    let x: Int

    override init() {
        x = 1
        assert(x == 1) // causes error
        super.init()
        assert(x == 1) // no error
    }
}

1 个答案:

答案 0 :(得分:0)

原因是assert必须读取属性x的值 虽然您可以省略self作为便捷语法assert使用属性的隐式setter,但必须调用self.x == 1

错误信息的内容。

您可以使用临时局部变量来计算所需内容,但在调用super.init()之前不能使用实例变量。

或者使用structprotocol类型,不需要拨打super.init()