[英]Initializer chaining ('super.init') cannot be nested in another expression
為什么我在此代碼中收到以下錯誤?
final class HomeViewController : someBaseClass {
init(something: SomethingProtocol) {
someFunction {
self.something = something
super.init(nibName: Self.nibName(), bundle: Bundle.main) //here
}
}
}
初始化器鏈接('super.init')不能嵌套在另一個表達式中
那是因為swift使用的兩階段初始化原理:
在您的代碼中,您首先使用應該執行必要步驟的尾隨閉包調用 function。 這是不允許的,因為 function 不知道初始化的 state 並且可以假設 object 已經完成了階段 1。這就是您收到此錯誤消息的原因。
此外,對super.init()
的調用在參數中引用了 self,而初始化的階段 1 尚未完成,引用 self 仍然是不安全的。 因此,即使您在調用閉包之前正確執行操作,您也會收到一條錯誤消息:
init(something: SomethingProtocol) {
self.something = something
super.init(nibName: self.nibName(), bundle: Bundle.main) // OUCH!!
someFunction {
...
}
}
錯誤消息也將是明確的:“ 'self' used in method call 'nibName' before 'super.init' call ”。 這是因為必須在調用之前評估參數並再次中斷兩階段初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.