Swift 'defer' 关键字导致分段错误

Swift 'defer' keyword causes Segmentation Fault

这是在一个全新的 Xcode 项目中发生的。我添加的第一个 class 是 UIView 的子 class,它工作正常,如下所示:

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.

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

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

您肯定 永远不会 被允许在您的 defer 中调用 super,但是,因为这将完全违反调用顺序的规则事情必须在初始化期间完成。您正在尝试做的特定事情是一个糟糕的想法。编译器知道以安全和一致的方式进行初始化的规则;听编译器。