我在swift4中使用新的kvo,只有当类的值在外面改变时它才有效。
@objcMembers class BaseGameLogic: NSObject {
var timer: Timer!
dynamic var time = 10
override init() {
super.init()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(decreaseTime), userInfo: nil, repeats: true)
}
func decreaseTime() {
self.time -= 1
print("in game logic time: \(time)")
if time == 0 {
timer.invalidate()
}
}
}
在其他课程中,它看起来像是:
class GameViewController: UIViewController {
var gameLogic = BaseGameLogic()
override func viewDidLoad() {
super.viewDidLoad()
let kvo = gameLogic.observe(\.time, options: [.new]) { object, value in
print(value)
}
}
}
我在控制台上没有输出!
但是当我在kvo
之后添加以下代码行时:
gameLogic.time = 20
我得到输出到控制台,通知新值(20)来了。