我如何使用Swift 3 scheduleRepeating?

Mar*_*ten 9 swift swift3

它与某些事情有关DispatchSourceTimer,但我无法到达任何地方.

这给了我一个关于"模棱两可的参考"的错误:

DispatchSourceTimer.scheduleRepeating(deadline:.now(), interval:.milliseconds(delay), leeway:.milliseconds(1))
Run Code Online (Sandbox Code Playgroud)

我的解决方案

问题与类型混淆有关.非常感谢matt指向正确的方向.这是我的完整结果.

private var queueNo = 0
@discardableResult  func repeater(_ delay:Int, _ closure:(()->())) -> (()->()) {
    let queue = DispatchQueue(label: "repeater\(queueNo)", attributes: [])
    queueNo += 1
    let timer = DispatchSource.makeTimerSource(flags: [], queue: queue)
    timer.scheduleRepeating(deadline: .now() + .milliseconds(delay), interval: .milliseconds(delay), leeway: .milliseconds(1))
    timer.setEventHandler {
        DispatchQueue.main.async(execute: closure)
    }
    timer.resume()
    return {
        timer.cancel()
    }
}
Run Code Online (Sandbox Code Playgroud)

Sci*_*nfu 0

尝试这个

override func viewDidLoad() {
    super.viewDidLoad()
    //Swift 3
    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.update), userInfo: nil, repeats: true);
}

func update() {
    // Do Something
}
Run Code Online (Sandbox Code Playgroud)