【发布时间】:2018-03-15 10:34:30
【问题描述】:
几块代码:
这行得通:
import Foundation
class Class1 {
init(param1: String?) {
print("hello")
}
convenience init() {
self.init(param1: nil)
}
}
class SubClass1: Class1 {
}
let obj = SubClass1()
在上面的代码中,指定的初始化器被传递给了 SubClass1,因为 SubClass1 没有提供自己的指定初始化器。此外,便利初始化程序也被传递下来。因此,这是可行的。
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()
这也有效,因为 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' 缺少参数”。 在这里,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()
为什么需要重写所有指定的初始化器,以便一个方便的初始化器工作,它只调用一个指定的初始化器?
【问题讨论】:
标签: ios swift xcode initializer