import UIKitclass person : NSObject { var name : String? var age : Int = 0 //1.重寫父類的初始化方法 override init(){ //在建構函式中,如果沒有明確調用super.init(),那麼系統會自動幫你調用super.init() super.init() print("-------") } //2.自訂建構函式,直接追加參數 init(name:String , age:Int) { self.name = name self.age = age } /* //3.1自訂建構函式,使用字典作為參數 (第一種方法) init(dict : [String:Any]) { let tempName1 = dict["name"] //此時得到的tempName1是Any。任意的可選類型 let tempAge1 = dict["age"] //此時得到的tempAge1是Any。 任意的可選類型 //as?最終轉成的類型是一個可選類型 //as!最終轉成的類型是一個確定類型 let tempName2 = tempName1 as? String //此時得到的tempName2是String。 字串的任意類型 name = tempName2 //swift是強型別語言,只有相同的類型才可以賦值 //第一種age賦值方法,不安全如果字典中沒有傳age參數會崩潰 //let tempAge2 = tempAge1 as! Int //此時得到的tempAge2是Int Int類型 //age = tempAge2 //swift是強型別語言,只有相同的類型才可以賦值 //第二種age賦值方法,如果字典中沒有傳age參數不會造成崩潰 if let tempAge = tempAge1 as? Int {//先把任意可選類型轉化成Int。可選類型,再使用可選綁定拿到int值 self.age = tempAge } }*/ //3.2自訂建構函式,使用字典作為參數 (第二種方法) init(dict:[String:Any]) { super.init() setValuesForKeys(dict) } //避免字典參數中傳的參數在類中沒有定義相應的屬性造成崩潰,重寫此方法 override func setValue(_ value: Any?, forUndefinedKey key: String) { } }//建立person對象let p1 = person()//使用有參構造建立person對象let p2 = person(name:"zhengyanfeng" , age:18)print(p2.name!,p2.age)//使用以字典為參數的有參構造建立對象let p3 = person(dict: ["name":"zhengyanfeng","age":17,"height":1.88])print(p3.name! , p3.age)