预定定时器不会触发

时间:2017-07-10 21:27:44

标签: swift timer command-line-interface nstimer

我正在尝试使用Swift作为CLI工具的语言,它应该用作简单的Web爬虫。

在我的main文件中,我创建了一个APIFetcher类的实例。在APIFetcher I instantiate an instance of Timer with the given time interval的初始化中。一旦我调用startQuerying方法,它就会将Timer添加到主运行循环中 - 此时我希望调用performTask方法,但事实并非如此。我做错了什么?

    @available(OSX 10.12, *)
    public init(with interval: TimeInterval) {
        self.timer = Timer(timeInterval: interval, repeats: true) { _ in
            self.performTask()
        }
    }

    deinit {
        self.timer?.invalidate()
        self.timer = nil
    }

    public func startQuerying(_ url: URL) {
        guard let unwrappedTimer = self.timer else { return }

        RunLoop.main.add(unwrappedTimer, forMode: .defaultRunLoopMode)
    }

    func performTask() {
        print("Performed scheduled task")
    }

1 个答案:

答案 0 :(得分:1)

感谢vadian你是对的,我添加了计时器来运行循环,但从未实际启动它。这解决了整个问题:

RunLoop.main.add(unwrappedTimer, forMode: .defaultRunLoopMode)
RunLoop.main.run()

另请参阅When Would You Use a Run Loop?文档