Swift iOS-如何在循环内的循环完成后执行完成

时间:2017-04-23 09:26:50

标签: ios swift loops completionhandler

我在另一个循环中有一个循环,我希望内循环在两个循环完成后运行一个完成块。

内循环和完成:

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个循环而不是循环内的循环。我还在群组中发现了其他帖子,但它们都基于网络电话。

最好的方法是什么?

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次。