2016-07-16 1 views
9

それはDispatchSourceTimerと関係がありますが、私はどこにも行けません。スウィフト3のスケジュールを使用するにはどうすればいいですか?

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(...)を必要なときに、私は本当に静的関数を呼び出していました。第二に私の '遅延 'は型の問題を引き起こした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のタイマーは異なるものです。 GCDタイマーは、実行方法をより詳細に制御し、優先順位を付けることができ、バッテリにやさしい... – Moose

関連する問題