我想在调用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
}
}
答案 0 :(得分:0)
原因是assert
必须读取属性x
的值
虽然您可以省略self
作为便捷语法assert
使用属性的隐式setter,但必须调用self.x == 1
。
错误信息的内容。
您可以使用临时局部变量来计算所需内容,但在调用super.init()
之前不能使用实例变量。
或者使用struct
或protocol
类型,不需要拨打super.init()