example dispatchqueue dispatch_async async swift grand-central-dispatch swift3 dispatch

dispatchqueue - nsoperationqueue swift 3 example



DispatchSourceTimer y Swift 3.0 (1)

Asegúrese de que el temporizador no se salga del alcance. A diferencia de NSTimer , necesita mantener una referencia fuerte a sus temporizadores GCD, por ejemplo:

var timer: DispatchSourceTimer? private func startTimer() { let queue = DispatchQueue(label: "com.firm.app.timer", attributes: .concurrent) timer?.cancel() // cancel previous timer if any timer = DispatchSource.makeTimerSource(queue: queue) timer?.schedule(deadline: .now(), repeating: .seconds(5), leeway: .milliseconds(100)) // or, in Swift 3: // // timer?.scheduleRepeating(deadline: .now(), interval: .seconds(5), leeway: .seconds(1)) timer?.setEventHandler { [weak self] in // `[weak self]` only needed if you reference `self` in this closure and you want to prevent strong reference cycle print(Date()) } timer?.resume() } private func stopTimer() { timer?.cancel() timer = nil }

No puedo entender cómo hacer que el temporizador de despacho funcione repetidamente en Swift 3.0. Mi código:

let queue = DispatchQueue(label: "com.firm.app.timer", attributes: DispatchQueue.Attributes.concurrent) let timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: UInt(0)), queue: queue) timer.scheduleRepeating(deadline: DispatchTime.now(), interval: .seconds(5), leeway: .seconds(1) ) timer.setEventHandler(handler: { //a bunch of code here }) timer.resume()

El temporizador simplemente dispara una vez y no se repite como debería ser. ¿Cómo puedo arreglar esto?