2016-06-08 178 views
1

這發生在一個全新的Xcode項目上。我說第一類是UIView一個子類,其正常工作是這樣的:Swift'defer'關鍵字導致分段錯誤

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開始可以使用延遲,而且我的確運行了Swift 2.2。

回答

1

deferinit方法中是非法的。編譯器想要告訴你,但在它可以這樣做之前就崩潰了。

在即將到來的Swift 3迭代中有一個解決此問題的建議,並允許defer在這種情況下在某些情況下工作,因爲這樣做是有充分理由的;但在那之前,不要這樣做。

你肯定會永遠被允許然而調用superdefer,因爲這將完全擊敗規則中的東西必須在初始化時完成的順序。你想要做的特別的事情是一個可怕的想法。編譯器知道以安全和一致的方式進行初始化的規則;聽聽編譯器。