普通初始化器
class Test {
var name: String
init(name: String) {
self.name = name
}
}
var t1 = Test(name: "hello")
可失败初始化器
class Test {
var name: String
init?(name: String) {
if name == "unknown" {
return nil
} else {
self.name = name
}
}
}
var t1: Test? = Test(name: "unknown")
print(ti?.name) //nil
必要初始化器
class Test {
var name: String
required init(name: String) {
self.name = name
}
}
class T: Test {
required init(name: String) {
super.init(name: name)
}
}
结构体成员初始化器
struct StructTest {
var name: String
var age: Int
//下面的初始化不需要我们实现,因为系统自动帮我们实现了
/*
init(name: String, age: Int) {
self.name = name
self.age = age
}
*/
}
var st = StructTest(name: "nihao", age: 18)
print(st.name) //nihao
print(st.age) //18
闭包设置属性初始值
class Test {
var name: String = {
return "nini"
}()
var num: Int = {
let a = 10
let b = 20
return a + b
}()
}
var t1 = Test()
print(t1.name) //nini
print(t1.num) //30
反初始器
当类对象没有被强应用,就会触发反初始化器,被释放。就是说引用计数为0时触发反初始器
deinit {
print("销毁了")
}