Swift 1.2:' self'在super.init调用之前使用

时间:2015-04-10 01:01:39

标签: swift

我有这段代码:

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中解决,但我没有想法。

1 个答案:

答案 0 :(得分:2)

这是一个临时解决方法:

private(set) var deferred : ()->() = { }

required init(coder aDecoder : NSCoder) {
    super.init(coder: aDecoder)
    self.deferred = {
        self.doSomething()
    }

}

我的想法是,好吧,我们做了"牺牲财产的不变性",但从公众的角度来看,财产仍然是不可变的,因为设定者是私人的。