几段代码:
这项工作:
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
}
let obj = SubClass1()
在上面的代码中,指定的初始化器被传递给子类1,因为子类1不提供自己的指定初始化器。此外,还传递了方便初始化器。因此,这是可行的。
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
override init(param1: String?) {
print("hello 2")
super.init(param1: nil)
}
}
let obj = SubClass1()
这也是可行的,因为子类1现在已经提供了自己的指定初始化器。
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”缺少参数”。
在这里,子类1有一个指定的初始化器,来自父类的方便初始化器也调用相同的初始化器,那么为什么会出现错误?
这
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()
为什么需要覆盖所有指定的初始值设定项才能使仅调用其中一个指定初始值设定项的一个方便初始值设定项工作?