2016-08-22 7 views
1

私はディスパッチキューを無限に実行する必要があります。スレッドを継続的に実行するためにdo whileループに入れようとしていますが、私がしようとすると空白の画面が表示されます。Swift 2.2:ループとディスパッチキュー

以下

は、コードで

var i = 1 
    do{ 
    dispatch.main(3) 
    { 
     self.myfunction() 
    } 
    i+=1 
    }while(i>0) 

私は、理解していない、なぜそれが起こっているのでしょうか?数秒ごとに呼び出されるディスパッチを取得する方法に関するアイデアは何ですか?

+0

あなたは、メインスレッド上でこのコードを実行していますか? – avismara

+0

はい、メインスレッドで実行しています – Coding4Life

+0

メインスレッドでwhileループを無期限に実行すると、UIがブロックされます。これもあなたの場合でした。 – avismara

答えて

1

NSTimerの拡張子は、EZSwiftExtensionsです。

extension NSTimer { 
    public static func runThisEvery(seconds seconds: NSTimeInterval, handler: NSTimer! -> Void) -> NSTimer { 
     let fireDate = CFAbsoluteTimeGetCurrent() 
     let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, seconds, 0, 0, handler) 
     CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes) 
     return timer 
    } 
} 

コードの意味はわかりやすいです。実行ループタイマーを作成し、それを実行ループに追加して実際に実行して起動させ、後でそのインスタンスを停止できるようにそのインスタンスを戻します。

let timer = NSTimer.runThisEvery(seconds: 3) { _ in self.myFunction() } 

ただ、それを停止するには:

timer.invalidate() 
+0

ありがとう助け:) – Coding4Life

関連する問題