请帮忙,如何在 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运行时一起使用
答案 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()
}
}