構造函數類似oc中的init方法
默認情況下,創建一個,類會調用一個構造函數
即使沒寫任何構造函數,編譯器會默認一個構造函數
如果是繼承NSObject,可以對構造函數重寫
class Person: NSObject { var name: String? var age:Int = 0 // 重寫 override init() { // 在構造函數中,如果沒有明確調用super.init(),那么系統會幫助調用 super.init() } // 自定義構造函數 init(name:String,age:Int) { self.name = name self.age = age } // init(dict:[String : AnyObject]) { //// 這種寫法會報錯 //// name = dict["name"] //// age = dict["age"] //// 因為字典取值是一個可選類型 // // let tempname = dict["name"] //// tempname是一個AnyObject可選類型 //// as?最終轉成的類型是一個可選類型,name是可選類型 // name = tempname as?String // // //// age 是一個確定的int行 //// as!最終轉換的是一個確定類型(這是在強制解包,危險,如果沒值,會崩潰) // let tempage = dict["age"] // age = tempage as!Int // //// 優化后的寫法(可選綁定) // if let tempage = dict["age"] as?Int { // age = tempage // } // // } // 常用方法kvc init(dict : [String : AnyObject]) { super.init() setValuesForKeysWithDictionary(dict) } } let p = Person() let p1 = Person.init(name: "why", age: 12) print(p1.name) let p2 = Person.init(dict: ["name":"ee","age":23])