知識點總結:swift
一、結構體ide
1.一、默認初始化方法:一、空初始化方法;二、成員初始化方法函數
struct Person{ var name = "tom" var age = 1 } let person = Person()//空初始化方法 print("person:name=\(person.name),age=\(person.age)") let person1 = Person(name:"JIM",age:3)//成員初始化方法 print("person:name=\(person1.name),age=\(person1.age)")
1.二、自定義初始化方法和委託初始化方法ui
一旦有了本身的初始化方法,swift就不會提供默認的初始化方法。swift編譯器容許在初始化過程當中初始化常量屬性。spa
struct Person{ var name:String let age:Int init(name:String,age:Int){ self.name = name self.age = age } //委託初始化 init(name:String){ self.init(name: name, age: 2) } } let person1 = Person(name:"JIM",age:3) print("person:name=\(person1.name),age=\(person1.age)")
二、類初始化code
2.一、默認初始化方法blog
swift 只會提供一個默認的空初始化方法。繼承
2.2 指定初始化方法和便捷初始化方法編譯器
通常來講,類不會繼承父類的初始化方法,由於swift但願避免子類在不經意間提供沒法爲全部屬性賦值的初始化方法(子類常常會增長父類不存在的屬性)。讓子類提供本身的初始化方法能夠避免實例被不完整的初始化方法初始化。不過,類確實會在一些狀況下自動繼承父類的初始化方法。若是子類爲全部新增的屬性提供了默認值,那麼在如下兩種場景下,類會繼承父類的初始化方法。it
class Person{ var name:String let age:Int init(name:String,age:Int){ self.name = name self.age = age } convenience init(name:String){ self.init(name: name, age: 0) } } class Student:Person{ var score = 90 } let stu = Student(name: "li")//由於子類全部新增屬性提供了默認值,因此繼承父類的指定構造函數和便捷函數
class Person{ var name:String let age:Int init(name:String,age:Int){ self.name = name self.age = age } convenience init(name:String){ self.init(name: name, age: 0) } } class Student:Person{ var score:Int override init(name: String, age: Int) { self.score = 40 super.init(name: name, age: age) } } let stu = Student(name: "li")//由於子類實現父類全部的置頂初始化方法,因此繼承父類的指定構造函數和便捷函數
2.三、必需初始化方法
一個類能夠要求子類提供特定的初始化方法。
class Person{ var name:String let age:Int required init(name:String,age:Int){ self.name = name self.age = age } } class Student:Person{ var score:Int required init(name: String, age: Int) { self.score = 40 super.init(name: name, age: age) } }
2.四、反初始化
class Person{ var name:String let age:Int init(name:String,age:Int){ self.name = name self.age = age } deinit { print("deinit") } }
三、可失敗的初始化方法
class Person{ var name:String let age:Int init?(name:String,age:Int){ self.name = name self.age = age } } struct Town{ var region = "left" init?(region:String) { self.region = region } }