类的初始化方法
Swift 的 Class 中所有的属性都必须初始化
class Person: NSObject { // 下面属性初始化值为 nil var name: String? var age: Int? var gender: String? }
属性在初始化方法中初始化, 属性可以不加可选 ?
class Person: NSObject { var name: String var age: Int var gender: String // 自定义初始化方法 init(name: String, age: Int, gender: String) { self.name = name self.age = age self.gender = gender } }
Swift 允许方法重载, 方法名可以一致, 只要参数和返回值有不一致. 如果自定义了初始化方法, 那么原来 init() 方法将失效, 除非重写初始化方法
class Person: NSObject { var name: String var age: Int var gender: String // 重写初始化方法 override init() { self.name = "cui" self.age = 20 self.gender = "man" } // 自定义初始化方法 init(name: String, age: Int, gender: String) { self.name = name self.age = age self.gender = gender } }
KVC 赋值注意点
// KVC 键值编码
// 1.如果在初始化方法中进行KVC赋值, 需要调用 super.init() 进行初始化
// 调用 super.init()的目的就是为了能在 KVC 赋值之前给属性分配存储空间
// 2.如果定义一个对象属性, 那么后面可以写上 ?
// 3.如果定义一个基本数据类型, 那么建议直接赋值为 0 或者 true 布尔值
// 4.KVC 赋值属性必须和字典 key 一致, 可以有额外的属性
var name: String?
var gender: String?
var age: Int = 0
var marry = true
init(dict: [String : NSObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}