在Swift4.0中,KVO的使用方式相对于3.2有一些变化,为了方便以后查阅,这里将Demo代码记录在这里。
代码:
import UIKit
class MyClass: NSObject {
@objc dynamic var date = Date()
}
class AnotherClass: NSObject {
var myObject: MyClass!
var observation: NSKeyValueObservation?
override init() {
super.init()
myObject = MyClass()
print("初始化了,当前日期是:\(myObject.date)")
observation = myObject.observe(\MyClass.date, options: [.new], changeHandler: { (object, change) in
print("hello")
if let newDate = change.newValue {
print("new date is \(newDate)")
}
})
self.myObject.date = Date() // 这里是设置时间(在PlayGround中可以运行)
/*
let time = DispatchTime.now() + 2
DispatchQueue.main.asyncAfter(deadline: time) {
print("改变") // 在这里延迟改变时间可以更清楚的看出
self.myObject.date = Date()
}
*/
}
}
let a = AnotherClass() // 初始化这个对象来运行代码