2017-04-23 116 views
-1

我在另一個循環內有循環,並且我希望內循環在兩個循環完成後都運行完成塊。Swift 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,因此內循環將運行1次並打印0,然後打印「完成」等等。

所需的輸出可以通過使用

runThenPrint(5, completion: imDone) 

,你只是想「內部」 for循環運行5次來實現。

+0

我已經知道我可以使用內部循環本身。不過謝謝 –