這裏是a link到斯威夫特的教程。 在部分初始化 - 覆蓋失敗的初始化程序 請注意,如果使用非破壞的子類初始化程序覆蓋失敗的超類初始化程序,則子類初始化程序不能委派給超類初始化程序。重寫一個Failable初始值設定爲雨燕
但下面的例子:
class Document {
var name: String?
// this initializer creates a document with a nil name value
init() {}
// this initializer creates a document with a non-empty name value
init?(name: String) {
if name.isEmpty { return nil }
self.name = name
}
}
和:
class AutomaticallyNamedDocument: Document {
override init() {
super.init()
self.name = "[Untitled]"
}
// This is nonfailable override superclass's failable
override init(name: String) {
// Why subclass initializer still can delegate up to the superclass initializer??
super.init()
if name.isEmpty {
self.name = "[Untitled]"
} else {
self.name = name
}
}
}
子類初始化不能委派到超初始化 爲什麼子類的初始化仍然可以委派到超初始化?
添加到@Nate庫克的回答,你的'覆蓋的init(名稱:字符串)'應該叫'super.init(名稱:名稱)'爲了完成_「來推翻failable超初始化與nonfailable子類初始化」 _ ,這應該會給你一個編譯器錯誤。 – 2016-06-29 00:49:26