2016-11-15 1 views
0

지연의 스위프트 3 규칙 :Swift 3에서 for 루프를 지연시키는 방법은 무엇입니까?

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

이 내가 루프의 내부를 넣어한다면 비동기 작동, 다음이에서 모든 명령을 실행합니다 : 내가 전화

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

지연 후 한 번.

나는과 같이 for 루프에서 오전 :

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

스 니펫 (snippet)에서 각 프로세스는 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/객실/127579/신속한 대화, 우리는 그곳에서 토론 할 수 있습니다. –

관련 문제