2016-11-15 10 views
0

遅延のスウィフト3大会:Swift 3のforループをどのように遅延させるのですか?

delay(1.0, closure: { 
         //Enter Code 
        }) 

これは私がforループのこの内部を置くのであれば非同期に動作し、それがすべてで、これらのコマンドを実行します:私はそれを呼び出す

func delay(_ delay: Double, closure: @escaping()->()){ 
    let when = DispatchTime.now() + delay 
    DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 
} 

遅れて1回。

私はそうのようなループのために午前:

for i in array{ 
    //I want to do a delay here 
     for j in i{ 
     //I also want to do a delay here 
     } 
    } 
これのポイントは、私は内部そして、それはループのために「J」に行く前に、ループの最初の内部遅延があるようにしたいです

"j" forループでは、次のJに行く前に遅延が必要です。

このSwift 3の遅延機能は非同期であるため、助けてください。

+0

使用 'のThread.sleep(forTimeInterval:1.0)を使用しているループのためにこれを表現する別の方法は、 - 20 'の代わりに' asyncAfter 'これが機能しない –

答えて

0

スニペットでは、各プロセスは、iとjを処理するための時間間隔の後に実行されます。すべてのプロセスは非同期で行われるため、問題は発生しません。

for var i:Int in 10..<20 { 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1, execute: { 
    for var j:Int in 10..<20 { 
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2, execute: { 
     }) 
     j += 1 
    } 
}) 
i += 1 
} 

stride

public func logger(logMessage: Any) { 
    print("\(Date()) \(logMessage)") 
} 

for var i in stride(from: 10, through: 20, by: 1) { 

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1, execute: { 
     logger(logMessage: "i:\(i)") 
     for var j in stride(from: 30, through: 40, by: 1){ 
      DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2, execute: { 
       logger(logMessage: "j:\(j)") 
      }) 
     } 
    }) 
} 
+0

の、10を出力します同時に、これは今私が必要としていたものです。私は10を印刷し、異なる時間に繰り返し、10-20を印刷し、11に行って同じことをします。 –

+0

http://chat.stackoverflow .com/rooms/127579 /スウィフトチャット、私たちはそこで議論することができます –

関連する問題