为什么我的计时器不想在指定的时间间隔内触发?

Che*_*ong 0 timer swift

我的班级中有这两个功能:

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();
}
Run Code Online (Sandbox Code Playgroud)

控制台的结果是这样的:

NOW: 2017-03-01 03:32:36 +0000
FIRE DATE: 2017-03-01 03:32:46 +0000
Run Code Online (Sandbox Code Playgroud)

然后我在 上设置了一个断点doSomething();。但是等了 1 分钟后,根本没有调用断点。我还检查了 timer 是否isValid(),它返回true。那么为什么我的函数没有被调用?

ken*_*ytm 5

从文档

使用init(timeInterval:invocation:repeats:)orinit(timeInterval:target:selector:userInfo:repeats:)类方法创建计时器对象,而不将其安排在运行循环上。(创建完成后,必须通过调用add(_:forMode:)对应RunLoop对象的方法,手动将定时器添加到run loop 。)

那是你需要打电话

RunLoop.current.add(alertEndTimer, forMode: .defaultRunLoopMode)
Run Code Online (Sandbox Code Playgroud)

以启动计时器。


您可以使用scheduledTimer方法创建计时器以自动启动它。

alertEndTimer = Timer.scheduledTimer(timeInterval: 10, 
                                     target: self, 
                                     selector: #selector(hideAlert),
                                     userInfo: nil,
                                     repeats: false)
Run Code Online (Sandbox Code Playgroud)