构造函数类似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])