斯威夫特推迟了#39;关键字导致分段错误

时间:2016-06-08 18:50:00

标签: ios swift deferred

这是在一个全新的Xcode项目上发生的。我添加的第一个类是UIView的子类,它的工作原理如下:

class CIHomeView: UIView {
init() {
    super.init(frame: CGRectZero)
    print("test")
}

但是,只要我添加延迟:

class CIHomeView: UIView {
init() {
    defer { super.init(frame: CGRectZero) }
    print("abc")
}

我收到了分段错误编译错误。此外,Xcode的语法突出显示暂时停止工作。很奇怪。我的理解是,从Swift 2.0开始可以使用defer,而我确实在运行Swift 2.2。

1 个答案:

答案 0 :(得分:1)

deferinit方法中是非法的。编译器想告诉你,但是在它可以这样做之前就崩溃了。

在即将到来的Swift 3迭代中,有一个提议可以解决这个问题,并且在某些情况下允许defer在这种情况下工作,因为有充分的理由这样做;但在那之前,不要这样做。

然而,你肯定永远不允许在你的super中拨打defer,因为这会完全违反在此期间必须完成的订单的规则初始化。你要做的特别的事情是一个糟糕的主意。编译器以安全和一致的方式知道初始化的规则;听取编译器。