我在另一个循环中有一个环,我希望内部循环在两个循环完成后运行一个完成块。
内部循环和完成:
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
我查看了此帖子链接,但它基于1个循环,而不是循环中的循环。我还发现了小组上的其他帖子,但它们是基于网络调用的。
让它运行的最佳方法是什么?
您得到的是完全正常的。请记住,一个用于循环的电话反复打电话。因此,for num in 0..<5
将使它运行4次。在第一次,num
为0,所以
for num in 0..<(count)){
print(num)
}
什么也没打印,然后立即调用完成处理程序,该处理程序打印为"完成"。在第二次,num
为1,因此循环的内部循环将运行1次并打印0,然后在so上打印"完成"。
可以使用
来实现所需的输出runThenPrint(5, completion: imDone)
您只想运行5次"内部"循环。