属性观察_Swift
属性观察 (Property Observers) 是 Swift 中一个很特殊的特性,利用属性观察我们可以在当前类型内监视对于属性的设定,并作出一些响应。Swift 中为我们提供了两个属性观察的方法,它们分别是 使用这两个方法十分简单,我们只要在属性声明的时候添加相应的代码块,就可以对将要设定的值和已经设置的值进行监听了: class MyClass {
var date: NSDate {
willSet {
println("即将将日期从 (date) 设定至 (newValue)")
}
didSet {
"已经将日期从 (oldValue) 设定至 (date)")
}
}
init() {
date = NSDate()
}
}
let foo = MyClass()
foo.date = foo.date.dateByAddingTimeInterval(10086)
// 输出
// 即将将日期从 2014-08-23 12:47:36 +0000 设定至 2014-08-23 15:35:42 +0000
// 已经将日期从 2014-08-23 12:47:36 +0000 设定至 2014-08-23 15:35:42 +0000
在 let oneYearInSecond: NSTimeInterval = 365 * 24 * 60 * 60
var date: NSDate {
//...
didSet {
if (date.timeIntervalSinceNow > oneYearInSecond) {
"设定的时间太晚了!")
date = NSDate().dateByAddingTimeInterval(oneYearInSecond)
}
"已经将日期从 (oldValue) 设定至 (date)")
}
}
//...
}
更改一下调用,我们就能看到效果: // 365 * 24 * 60 * 60 = 31_536_000
foo.date = foo.date.dateByAddingTimeInterval(100_000_000)
// 即将将日期从 2014-08-23 13:24:14 +0000 设定至 2017-10-23 23:10:54 +0000
// 设定的时间太晚了!
// 已经将日期从 2014-08-23 13:24:14 +0000 设定至 2015-08-23 13:24:14 +0000
A>初始化方法对属性的设定,以及在 我们知道,在 Swift 中所声明的属性包括存储属性和计算属性两种。其中存储属性将会在内存中实际分配地址对属性进行存储,而计算属性则不包括背后的存储,只是提供 A {
var number :Int {
get {
"get")
return 1
}
set {"set")}
}
}
B: override var number: Int {
willSet {"willSet")}
didSet {"didSet")}
}
}
调用 let b = B()
b.number = 0
// get
// willSet
// set
// didSet
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |