我在另一个循环中有一个循环,我希望内循环在两个循环完成后运行一个完成块。
内循环和完成:
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}
}
在Playgrounds中我得到了:
DONE
0
DONE
0
1
DONE
0
1
2
DONE
0
1
2
3
DONE
但我想:
0
1
2
3
4
DONE
我查看了这篇文章link,但它基于1个循环而不是循环内的循环。我还在群组中发现了其他帖子,但它们都基于网络电话。
最好的方法是什么?
答案 0 :(得分:1)
你得到的是完全正常的。请记住for循环调用重复。因此for num in 0..<5
将使其运行4次。第一次,num
为0,所以
for num in 0..<(count)){
print(num)
}
不打印,然后立即调用完成处理程序,打印&#34; DONE&#34;。第二次,num
为1,因此内部for循环将运行1次并打印0,然后打印&#34; DONE&#34;等等。
使用
可以实现所需的输出runThenPrint(5, completion: imDone)
因为你只是想要内心的&#39; for循环运行5次。