Swift 中的计算属性、懒存储属性、属性观察器
2017-09-06 11:13
357 查看
计算属性
Swift 中的计算属性不存储值 而是提供一个getter 和 setter 来分别进行获取值 和 设置其他属性的值 , getter 使用get 关键字, setter 使用 set关键字进行定义。
如果计算属性的 setter方法没有将被设置的值定义一个名称,会默认使用 newValue 名称代替
代码示例
class person : NSObject { var length : Int = 10 var age : Int { get { return length * 2 } set { length = newValue / 2 } } //只读的计算属性 var height : Int { get { return length * 4 } } //只读属性可以忽略 get var height2 : Int { return length * 4 } }
懒存储属性
Swift 提供了所谓的懒存储属性懒存储属性是指当被第一次调用的时候才会计算其初始的属性,一个懒存储属性通过在属性声明的前面加上lazy来标识
注意::必须将懒加载存储属性声明成变量 (使用 var
关键字)因为属性的值在实例构造完成之前可能无法得到,二常量属性在构造过程完成之前必须要有初始值,因此无法声明成懒存储属性
class PersonInfo { var personFileName = "test.plist" } class personManager { lazy var personInfo = PersonInfo() var data = String() } let pm = personManager() pm.data = "2222" print(pm.data) print(pm.personInfo.personFileName)
在personManager 实例被创建的时候,没有必要马上创建PersonInfo 而是使用懒存储在用到 PersonInfo 的时候才创建
属性观察器
属性观察器可以用来监控和响应初始化的属性值得变化属性观察器包括 didSet 和 willSet 其中属性值改变前会触发 willSet 属性值改变之后会调用 didSet
注意
1、给属性添加观察器必须要声明清楚属性类型,否则编译器报错
2、willSet 可以带一个 newName 的参数 没有的话 该参数名默认为 newValue
3、didSet 可以带一个 oldName 的参数 没有的话 该参数名默认为 oldValue
4、属性初始化时,willSet 和 didSet 不会调用,只要在初始化上下文之外,当设置属性值时才会调用,另外,在 didSet
的实现体内给属性赋值,也不会再次调用属性的
5、即使是设置的与原来的相同,willSet 和 didSet 也会被调用
代码示例
class animal { var age = 1 var name : String = "狗" { willSet { age = 2 print("将要设置的新值::\(newValue) 年龄::\(age)") } didSet { age = 3 print("原来的名字::\(oldValue) 年龄::\(age)") } } } let dog = animal() dog.name = "狗" dog.name = "小明"
输出
相关文章推荐
- Swift基础语法-属性,存储属性,延迟存储属性,计算属性,属性观察器,类属性
- Swift编程语言学习9—— 存储属性和计算属性
- Swift 的存储属性和计算属性
- Swift面向对象基础(中)——Swift中的存储属性和计算属性
- Swift计算属性和存储属性的重要区别
- swift 属性定义 存储属性、计算属性、类属性
- swift自学笔记(四)(懒加载、存储属性、计算属性、类属性、属性监听)
- Swift面向对象基础(中)——Swift中的存储属性和计算属性
- swift学习笔记--计算属性和存储属性的区别
- Swift 系统学习 24 类相关 存储属性 计算属性 类型属性 延迟加载属性
- Swift面向对象基础(中)——Swift中的存储属性和计算属性
- swift_044(Swift 计算属性和存储属性的概念以及使用)
- Swift 存储属性和计算属性
- [swift学习之十四]计算属性和存储属性
- Swift基础语法: 26 - Swift的存储属性, 计算属性, 属性监视器
- Swift--存储属性-备
- 12.8 Swift闭包或函数存储属性缺省值
- Swift—计算属性-备
- Swift计算属性
- Swift研究之编程高级教程(二)属性,存储属性详解