Swift-自定義類的構造函數


構造函數類似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])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM