数ブロック:スウィフト初期化子ミステリー
これは動作します:上記のコードで
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
}
let obj = SubClass1()
をSubClass1は独自の指定された初期化子が提供されていないため、指定された初期化子はSubClass1に受け継がれています。また、便利なイニシャライザも渡されます。したがって、これは動作します。
これはSubClass1が独自の指定されたイニシャライザを提供したためです。
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
init(param2: String?) {
print("world")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
override init(param1: String?) {
print("hello 2")
super.init(param1: nil)
}
}
let obj = SubClass1()
これは、最後の行について、パラメータ 'param1'がパラメータ "param1 'に" error:missing argument "を与えます。 ここでは、SubClass1のために指定された初期化子があり、親からの便利な初期化子も同じ初期化子を呼び出します。
この
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
required init(param2: String?) {
print("world")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
override init(param1: String?) {
print("hello 2")
super.init(param1: nil)
}
required init(param2: String?) {
print("world")
super.init(param2: nil)
}
}
let obj = SubClass1()
とこの作品:
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
init(param2: String?) {
print("world")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
override init(param1: String?) {
print("hello 2")
super.init(param1: nil)
}
override init(param2: String?) {
print("world")
super.init(param2: nil)
}
}
let obj = SubClass1()
なぜそれがすべて指定された初期化子が一つだけ指定された初期化子のを呼び出す作業に初期化子1つの便宜上オーバーライドする必要がありますか?