![](/img/trans.png)
[英]In Objective-C, what is the difference between a Factory Method and a Convenience Initializer?
[英]Swift: Overriding a convenience with a designated initializer
Swift文檔說明了以下內容:
如果要覆蓋的初始化程序是一個便捷初始化程序,則根據上面在初始化程序鏈中描述的規則,您的覆蓋必須從其自己的子類中調用另一個指定的初始化程序。
這意味着,當我使用與基類中的convenience
初始化程序相同的簽名定義初始化程序時,它也必須充當convenience
初始化程序。 我不能用designated
初始化程序“覆蓋” convenience
初始化程序。
這對我來說似乎很尷尬:可能存在簽名的各種情況,例如(String)
只是基類的便利init,而是子類的指定init。 與方法相反,僅因為兩個初始化程序具有相同的簽名,它們不必執行類似的任務。 (String)
簽名可能意味着子類完全不同。
它們的含義是,如果覆蓋后的初始化程序是便捷初始化程序,則必須遵循Initialiser Chaining。
以下工作正常意味着您可以使用指定的初始化器覆蓋便利初始化器:
class Base {
var x = 0
init() {}
convenience init(_: Int) {
self.init()
self.x = 5
}
}
class Derived : Base {
init() {}
init(_: Int) {
super.init()
self.x = 10
}
}
var i = Derived(1) // x = 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.