我有这个代码:
class SomeViewController : UIViewController {
let deferred : ()->()
required init(coder aDecoder : NSCoder) {
deferred = {
self.doSomething()
}
super.init(coder: aDecoder)
}
func doSomething() {
// Does things....
}
}
在 Swift 1.2 中,编译失败并出现错误:
'self' 在 super.init 调用之前使用
在 1.2 之前的日子里,我们可以通过多种方式解决这个问题,例如隐式解包条件。这种方法将不再有效。
我看到其他答案引用了两阶段初始化或惰性装饰器,但都牺牲了属性的不变性。这在 Swift 1.2 中肯定是可以解决的,但我没有想法。
最佳答案
这是一个临时解决方法:
private(set) var deferred : ()->() = { }
required init(coder aDecoder : NSCoder) {
super.init(coder: aDecoder)
self.deferred = {
self.doSomething()
}
}
我的想法是,好吧,我们确实“牺牲了属性的不变性”,但从公共(public)角度来看,属性保持不变,因为 setter 是私有(private)的。
关于Swift 1.2 : 'self' used before super. 初始化调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551619/