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

Cannot place Swift assertions inside init() before call to super.init()

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

但是,如果我尝试放置此类断言,我会收到此错误消息:

'self' used before super.init call

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

UPDATE 这是一个简明的例子:

class Test: NSObject {
    let x: Int

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

原因是assert必须读取属性x的值。
虽然您可以省略 self 作为一种方便的语法 assert 使用 属性 的隐式 setter 并且必须调用 self.x == 1

错误消息就是这么说的。

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

或者使用不需要调用 super.init()

structprotocol 类型