不断检查变量

时间:2018-02-21 18:56:11

标签: ios swift while-loop timer

是否有办法不断检查变量是否在swift中发生了变化?

我已经尝试了一个基本的计时器想法,它不是很聪明,因为它不能精确地工作到允许的中断毫秒,并且可能是高度不可预测和小故障。有没有办法设计这样的检查器?理想情况下,它可以在等待方法中创建,例如:

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
})

我的意思是,当这个等待计时器正在等待时,如果指定的变量发生了变化,它是否会有一种异常打破并执行不同的代码?

2 个答案:

答案 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。