是否有办法不断检查变量是否在swift中发生了变化?
我已经尝试了一个基本的计时器想法,它不是很聪明,因为它不能精确地工作到允许的中断毫秒,并且可能是高度不可预测和小故障。有没有办法设计这样的检查器?理想情况下,它可以在等待方法中创建,例如:
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
})
我的意思是,当这个等待计时器正在等待时,如果指定的变量发生了变化,它是否会有一种异常打破并执行不同的代码?
答案 0 :(得分:2)
如果您可以自己编辑该属性(即您自己编写了该属性),则可以考虑使用didSet
块:
var someProperty: String {
didSet {
print("Got a new value: \(newValue)")
}
}
如果该属性不是由您编写但暴露于Objective-C,则可以执行一些键值观察:
@objc class MyClass : NSObject {
@objc dynamic var someProperty: String = "Hello"
}
let obj = MyClass()
obj.observe(\.someProperty) { (myClass, value) in
print("Got a new value: \(myClass.someProperty)")
}
obj.someProperty = "Changed!"
答案 1 :(得分:1)
你想要的是关键价值观察。基金会支持NSObject属性的KVO,并且支持Swift 4中的原生Swift KVO。