Swift 1.2 : 'self' used before super. 初始化调用

标签 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 中,编译失败并出现错误:

'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/

相关文章:

ios - 在 SwiftUI 中重新创建 twitter 的复制到剪贴板动画

ios - 如何正确编码 URL 字符串

json - 使用顶级数组进行 Swift 4 json 解码

iOS SwiftUI 视频自动播放

swift - 如何使用 GPUImage 框架将图像卡通化?

swift - 无法在 tvOS 中播放 YouTube 视频。得到一个 "Operation requires a client data source to have been registered"

swift - displayLink - 编译器永远修复我

ios - 更新 CoreData 实体或保存一个新实体

ios - UITableView Swift 将静态部分与动态部分结合起来

ios - 使用 Swift 和 CoreGraphics 定位图像