构造函数类似oc中的init方法
默认情况下,创建一个,类会调用一个构造函数
即使没写任何构造函数,编译器会默认一个构造函数
如果是继承NSObject,可以对构造函数重写
class Person: NSObject {
var name: String?
var age:Int = // 重写
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: )
print(p1.name) let p2 = Person.init(dict: ["name":"ee","age":])