Swift编程中的初始化与反初始化完全讲解

2020-01-08 22:35:17丽君

覆盖一个 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: "")