2017-04-23 8 views
-1

다른 루프 내에 루프가 있고 두 루프가 완료되면 내부 루프가 완료 블록을 실행하도록합니다.스위프트 IOS - 루프 내의 루프가 완료된 후 완료를 수행하는 방법

내부 루프 및 완료 :

func runThenPrint(_ count: Int, completion:()->()){ 
    for num in 0..<(count){ 
     print(num) 
    } 
    completion() 
} 

func imDone(){ 
    print("DONE") 
} 

내부 및 완료와 외부 루프 : 놀이터에서

//outer 
for num in 0..<5{ 
    //inner 
    runThenPrint(num){imDone} 
} 

내가 갖는 :

DONE 
0 
DONE 
0 
1 
DONE 
0 
1 
2 
DONE 
0 
1 
2 
3 
DONE 

하지만 내가 원하는 :

0 
1 
2 
3 
4 
DONE 

나는이 게시물을 보았습니다 link하지만 1 루프를 기반으로하고 루프 내에서 루프가 아닙니다. 그룹에 다른 게시물도 있지만 네트워크 통화를 기반으로했습니다.

이 프로그램을 실행하는 가장 좋은 방법은 무엇입니까?

+0

코드가 컴파일되지 않습니다. 실제 코드를 보여주십시오. – paper1111

+2

외부 루프의 목적은 무엇입니까? 'runThenPrint (5, completion : imDone)'만으로 원하는 출력을 얻을 수 있습니다. –

+0

@ paper1111 count 변수 끝에 추가로 닫는 괄호가있었습니다. –

답변

1

당신이 얻는 것은 완전히 정상입니다. for 루프는 반복적으로 호출한다는 것을 기억하십시오. 그래서 for num in 0..<5은 4 번 실행합니다. 처음에, num는 0, 그래서

for num in 0..<(count)){ 
     print(num) 
} 

인쇄 아무것도 한 다음 즉시 "DONE"인쇄 완료 핸들러 호출합니다. 두 번째 시간에 num이 1이므로 내부 for 루프가 1 회 실행되어 0을 인쇄 한 다음 "DONE"을 인쇄합니다. 그냥 루프에 대한 '내부'는 5 번 실행되도록 원하는

원하는 출력

runThenPrint(5, completion: imDone) 

을 사용하여 달성 될 수있다.

+0

나는 이미 그 자체로 내부 루프를 사용하여 얻을 수 있다는 것을 알았습니다.어쨌든 고마워. –