您的位置:首页 > 移动开发 > Swift

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 class 存储