我有这段代码:
class SomeViewController : UIViewController {
let deferred : ()->()
required init(coder aDecoder : NSCoder) {
deferred = {
self.doSomething()
}
super.init(coder: aDecoder)
}
func doSomething() {
// Does things....
}
}
在Swift 1.2中,无法使用错误进行编译:
'自'在super.init调用之前使用
在1.2天之前,我们可以通过多种方式解决这个问题,例如隐式解包条件。这种方法不再适用。
我已经看到其他答案引用了2阶段初始化或懒惰的装饰,但两者都牺牲了属性的不变性。当然,这必须在Swift 1.2中解决,但我没有想法。
答案 0 :(得分:2)
这是一个临时解决方法:
private(set) var deferred : ()->() = { }
required init(coder aDecoder : NSCoder) {
super.init(coder: aDecoder)
self.deferred = {
self.doSomething()
}
}
我的想法是,好吧,我们做了"牺牲财产的不变性",但从公众的角度来看,财产仍然是不可变的,因为设定者是私人的。