title | date | tags |
---|---|---|
Swift3.0学习(三) |
2017-03-08 15:29:43 -0800 |
swift |
面向对象–必选属性
构造函数时是分段构造,先构造子类,给’必选属性’设置初始值,然后再构造父类, 定义全局变量(属性)时,需要在构造函数中设置初始化变量值 super.init()是一个类构造结束 重写: override 函数重写(覆盖),如果在重写的方法中 没有super, 父类相关的一些操作就不会被执行 重载:函数名相同, 参数的类型 或者参数的个数不同 就形成了函数的重载 注意:重载构造函数,并且父类默认的构造函数 init()不重写, 父类默认的构造函数就不能够被访问,不能够确保必选属性设置初始值,只能调用重载的构造函数 面向对象–可选属性
使用KVC给对象设置值 注意: 在swift中使用KVC 基本数据类型不能声明为可选项,必须设置为必选项给定初始值
KVC实现的流程 遍历字典的键值 给对象发送 setValue: forKey消息 如果key 对象的属性不存在就将消息转发给 setVale: forUndefinedKey: 如果存在就直接设置值 注意:setVale: forUndefinedKey: 默认抛出异常 不能够super,如果super 相当于没有实现此方法
面向对象–便利构造函数
作用:方便快捷的创建对象 场景: 可检查参数是否正确来实例化 实例化控件 特点 必须以self来调用构造函数 指定的构造函数不能被重写,也不能被super调用 便利构造函数可被子类继承 可以构造失败,返回nil 面向对象 – 描述信息
重写 description 方法,返回值是string类型 使用kvc讲对象属性转换为字典 将字典转化为string类型
override var description: String {
let keys = ["name","age","number","sex"]
// 对象转为字典
let dict = self.dictionaryWithValuesForKeys(keys)
// 每个对象都有描述属性
return dict.description
}
面向对象 – 存储属性
面向对象 – 计算属性(readOnly)
只有getter,没有setter 只能取值不能赋值 每次调用都会被执行,消耗cpu 不占内存空间,依赖其他的属性来计算 面向对象 – didset 属性设置监察器
能获取 oldValue 和 newValue 的值 通常用来重写setter方法,实现视图绑定模型 在一个属性的didset中计算其他属性
缺点:消耗内存,被计算的属性占内存 优点:减少了cpu消耗 懒加载