请原谅我,因为我非常喜欢swift和编程。
当我说我已经努力理解这一点时,请相信我,但我根本无法理解,并且非常感谢任何帮助。
说我有这个功能:
func loop() {
for var i=0; i<5; i++ {
println(i)
}
}
我想打印到日志&#34;循环已完成&#34;一旦这个循环完成并完成运行,我该怎么做?如果我这样做:
func loop() {
for var i=0; i<5; i++ {
println(i)
println("loop has finished")
}
}
然后&#34;循环结束&#34;每次i递增后都会打印出来。
我已经尝试过阅读关闭和完成处理程序了,但此刻我的头脑全部都在我脑海中,我真的不明白我是如何完成上述任务的。
如果有一位天使可以告诉我如何完成上面的例子,那么我将负债累累。
感谢您对我目前可怜的知识的耐心!
答案 0 :(得分:11)
使用基本的闭包语法产生与其他人发布的结果相同的结果:
std::unique_ptr
这就是你所说的:
func printFunction() {
println("loop has finished")
}
func loopWithCompletion(closure: () -> ()) {
for var i=0; i<5; i++ {
println(i)
}
closure()
}
Swift 3更新:
loopWithCompletion(printFunction)
然后这样称呼:
func printFunction() {
print("loop has finished")
}
// New for loop syntax and naming convention
func loop(withCompletion completion: () -> Void ) {
for i in 0 ..< 5 {
print(i)
}
completion()
}
或
loop(withCompletion: printFunction)
答案 1 :(得分:7)
以下是您尝试实施的循环:
func loop() {
for var i=0; i<5; i++ {
println(i)
println("loop has finished")
}
}
&#34;循环已完成的原因&#34;被打印5次是因为它在for循环中。
当循环重复时(我在此处输入&#34;在此处输入代码),将在括号之间运行任何内容
for var i=0; i<5; i++ {
enter code here
}
循环的工作方式是,它将重复直到条件完成:即i<5
。如var i=0
中所述,您的i变量从0开始,每次循环重复时,此数字增加1,如i++
中所述
一旦i
不小于5(i等于5或大于5),那么将运行for-loop之后的代码。
所以如果你把你的println(&#34;循环已经完成&#34;)放在forloop之后,你知道它会在循环完成后运行,如下所示:
func loop() {
for var i=0; i<5; i++ {
println(i)
}
println("loop has finished")
}
答案 2 :(得分:4)
~2^64/100
答案 3 :(得分:3)
你的代码不起作用的原因是你在循环中有println()
语句,如下所示:
func loop() {
for var i=0; i<5; i++ {
println(i)
println("loop has finished")
}
}
因此,每次循环循环时,它都会打印出“完成”。
要解决此问题,您需要做的就是在循环之后放置println()
语句,如下所示:
func loop() {
for var i=0; i<5; i++ {
println(i)
}
println("loop has finished")
}
瞧瞧。您的应用现在可以正常运行了!
答案 4 :(得分:0)
您的打印语句总是在每个循环中打印出来。因此,您应该将那条语句放在foreach循环之外:
func loop() {
for i in 0...<5 {
print(i)
}
// it enters here when the loop is finished
print("loop has finished")
}