2016-07-16 2 views
9

Это как-то связано с DispatchSourceTimer, но я никуда не могу.Как использовать Swift 3 scheduleRepeating?

Это дает мне ошибку о «неоднозначной ссылки»:

DispatchSourceTimer.scheduleRepeating(deadline:.now(), interval:.milliseconds(delay), leeway:.milliseconds(1)) 

Мое решение

Проблема заключалась в том, чтобы сделать с типом путаницы. Спасибо матовый за то, что указал мне в правильном направлении. Вот мой полный результат.

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() 
    } 
} 
+0

для стартера, я действительно звонил статическую функцию, когда я нуждался в конкретизированных 'DispatchSource.timer (...)'. во-вторых, моя 'delay' была Int64, которая вызывала проблемы типа. –

+0

Похоже, это изменилось в Beta 4 –

+0

Hm. Вам нужно изучить это. –

ответ

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 
} 
+0

Это не отвечает на вопрос. NSTimer и GCD Timers - это разные вещи. GCD Timers дают гораздо больший контроль над тем, как он выполняется, могут быть приоритетными, более дружественными к батарее ... – Moose

Смежные вопросы