Linux中的Swift Timer

时间:2017-11-20 14:49:36

标签: swift linux timer

请帮忙,如何在 Linux Ubuntu 16.04 上的Swift 4中使用Timer实例?

当我尝试做的时候:

let timer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(MyClass.myMethod), userInfo: nil, repeats: true)

我收到错误:错误:' #selector'只能与Objective-C运行时一起使用

2 个答案:

答案 0 :(得分:6)

您可以在Linux上使用基于块的计时器功能。这是一个最小的 在Xcode 9.1中编译和运行的自包含示例 并在https://swift.sandbox.bluemix.net/#/repl上:

import Foundation
import CoreFoundation

let timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { timer in
    print("In timer function")
    exit(0)
}

CFRunLoopRun()

(我之所以添加exit(0)只是因为IBM Swift Sandbox限制了它 程序执行时间为5秒。)

或者,如所示使用DispatchSourceTimer here

答案 1 :(得分:1)

感谢@Martin R,我在Ubuntu 16.04上获得了Swift 4的最终代码:

import Foundation
import Dispatch

class MyClassWithTimer {

  var timer: DispatchSourceTimer?

  init() {
    startTimer()
  }

  func startTimer() {
    let queue = DispatchQueue(label: "com.domain.app.timer")
    timer = DispatchSource.makeTimerSource(queue: queue)
    timer?.schedule(deadline: .now(), repeating: 2.0, leeway: .seconds(0))
    timer?.setEventHandler { [weak self] in
        print("Execute timer action")
        self?.timerAction()
    }
    timer?.resume()
  }

  func timerAction() {
    print("Do something")
  }

  func stopTimer() {
      timer?.cancel()
      timer = nil
  }

  deinit {
      self.stopTimer()
  }
}