覆盖一个 failable 超类初始化时,nonfailable 子类初始化子类的初始化器不能委派到超类初始化器。
一个nonfailable初始化不能委托给一个failable初始化。
下面给出的程序描述failable和非failable初始化函数。
复制代码class Planet {
var name: String
init(name: String) {
self.name = name
}
convenience init() {
self.init(name: "[No Planets]")
}
}
let plName = Planet(name: "Mercury")
println("Planet name is: (plName.name)")
let noplName = Planet()
println("No Planets like that: (noplName.name)")
class planets: Planet {
var count: Int
init(name: String, count: Int) {
self.count = count
super.init(name: name)
}
override convenience init(name: String) {
self.init(name: name, count: 1)
}
}
当我们使用 playground 运行上面的程序,得到以下结果。
Planet name is: Mercury
No Planets like that: [No Planets]
init! Failable初始化器
Swift 提供 “init?”定义一个可选实例failable初始化。要定义特定类型的隐式解包可选的 'int! ' 被指定。
struct studrecord {
let stname: String
init!(stname: String) {
if stname.isEmpty {return nil }
self.stname = stname
}
}
let stmark = studrecord(stname: "Swing")
if let name = stmark {
println("Student name is specified")
}
let blankname = studrecord(stname: "")








