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])

 

posted @ 2016-09-01 14:34  J-Vijay  阅读(2287)  评论(0编辑  收藏  举报