为什么我的计时器不想以指定的间隔开火?

时间:2017-03-01 03:36:57

标签: swift timer

我班上有这两个功能:

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。那么为什么我的函数不被调用呢?

1 个答案:

答案 0 :(得分:3)

From the documentation

  

使用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)