必选属性
/*
在swift中 所有的类和类的方法 都是共享的
在同一个命名空间 所有的类都是共享的
命名空间 是项目名称
*/
/*
构造函数 : 分配内存空间 设置初始值
()
在swift中 所有的构造方法 都是init
*/
import UIKit
class Person: NSObject {
var name: String
var age: Int
//表示重写 表示重写父类的构造函数
//父类已经提供函数 子类需要对父类的函数进行扩展
//方法内 可以super.
override init() {
name = "刘亦菲"
age = 30
super.init()
// name = "刘亦菲"
}
}
子类构造
import UIKit
class Student: Person {
var no: String
override init() {
print("Student init")
no = "007"
//隐式生成 super.init 在Xcode 7 beta5 在之前的版本都需要手动添加
//建议自己手动加上 super.init
// super.init()
}
}
重载构造
//重载: 函数名相同 参数的类型 以及参数的个数不同 就形成重载 是面向对象最显著的标志
//极大简化 需要记住的函数名
//一旦重载构造函数 默认的构造函数就不能访问
//表示重写 表示重写父类的构造函数
//父类已经提供函数 子类需要对父类的函数进行扩展
//方法内 可以super.
//构造方法
init(name: String, age: Int) {
//当属性名和参数名相同时 需要加上 self来区分
self.name = name
self.age = age
super.init()
}
KVC构造
//KVC构造
init(dict: [String : AnyObject]) {
//KVC是OC特有的机制 OC可以和swift共存
//在运行时 给'对象' 转发 setValue: forKey:
//KVC 通过键值编码 给对象的属性设置初始值
super.init()
setValuesForKeysWithDictionary(dict)
}
override func setValue(value: AnyObject?, forKey key: String) {
print(value,key)
super.setValue(value, forKey: key)
}
//过滤掉 不存的在属性对应的key
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
print(value,key)
// super.setValue(value, forUndefinedKey: key)
}