簡體   English   中英

在Swift中調用NSObject子類的初始化程序中的super.init()

[英]Calling super.init() in initializer of NSObject subclass in Swift

我正在Swift中構建一個iOS應用程序,並利用Apple提供的Lister示例項目。

Lister使用兩個模型對象:List和ListItem。 我發現他們兩個都沒有在他們的初始值設定項中調用super.init() ,即使它們是NSObject的子類。

但是,在Lister的Objective-C版本中,兩個模型對象(AAPLList和AAPLListItem)都調用[super init]

Swift編程語言清楚地指出“指定的初始化器必須從它們的直接超類中調用指定的初始化器。”(初始化中的初始化程序鏈接規則1)

這里發生了什么? 為什么這是一個例外,如果你不應該總是在子類中調用super.init(),那么適用哪些規則?

即使我在文檔中找不到描述這個位置的地方,但是如果那是超類的唯一初始化,並且沒有被調用,則會在子類初始化器的末尾調用默認的超類初始化器。明確。

NSObject只有默認的初始化器(init()); 通過嘗試在不調用super.init():的構造函數中引用self(例如println(self)) ,可以看到超類初始化器在子類初始化器的末尾被調用super.init():不允許這樣做,因為那個階段沒有完全初始化。

如果你想在構造函數中的某個地方使用self,那么對象需要在那時完全構造,所以你需要在那之前手動調用super.init()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM