我班上有这两个功能:
func setTimer () {
alertEndTimer = Timer.init(timeInterval: 10, target: self, selector: #selector(hideAlert), userInfo: nil, repeats: false);
print ("NOW: \(now)")
print ("FIRE DATE: \(alertEndTimer!.fireDate)");
}
@IBAction func hideAlert () {
doSomething();
}
控制台的结果如下:
NOW: 2017-03-01 03:32:36 +0000
FIRE DATE: 2017-03-01 03:32:46 +0000
然后我在doSomething();
上设置了一个断点。但在等待1分钟之后,根本没有调用断点。我还检查了计时器isValid()
是否返回true。那么为什么我的函数不被调用呢?
答案 0 :(得分:3)
使用
init(timeInterval:invocation:repeats:)
或init(timeInterval:target:selector:userInfo:repeats:)
类方法创建计时器对象,而无需在运行循环上进行计划。 (创建后,您必须通过调用相应add(_:forMode:)
对象的RunLoop
方法手动将计时器添加到运行循环中。)
那就是你需要打电话
RunLoop.current.add(alertEndTimer, forMode: .defaultRunLoopMode)
以启动计时器。
您可以使用scheduledTimer
method创建计时器以自动启动计时器。
alertEndTimer = Timer.scheduledTimer(timeInterval: 10,
target: self,
selector: #selector(hideAlert),
userInfo: nil,
repeats: false)