使用闭包作为 While 循环的条件
Using a Closure as a While Loop's Condition
我想使用闭包作为 while 循环的条件。这是我的:
var x: Int = 0
var closure = {() -> Bool in return x > 10}
while closure {
x += 1
println(x) // never prints
}
它从不打印任何东西。如果我把它改成closure()
,它也不起作用。
如有任何帮助,我们将不胜感激。
你需要用()
来调用闭包,而你的条件写错了,开头是false
(应该是x < 10
,不是x > 10
).更改为:
var x = 0
var closure: () -> Bool = { x < 10 }
while closure() {
++x
print(x)
}
这里有两个问题。
首先,如所写,您的代码甚至无法编译。您需要将 while closure
更改为 while closure()
。
第二,更大的问题,你的closure
逻辑是错误的。 x > 10
永远不会 returns true
因为 x
永远不会大于 10
。把标牌翻过来就可以了。
Swift 2
var x = 0
var closure = { () -> Bool in return x < 10 }
while closure() {
++x
print(x)
}
Swift 1.2
var x = 0
var closure = { () -> Bool in return x < 10 }
while closure() {
++x
println(x)
}
两个问题:
- 你的逻辑是倒退的。您想要在
x
小于 10
时打印,因此:
- 当您直接调用闭包时,就像调用函数一样,即使用括号。
更新代码,使用 Swift 2.0 测试:
var x: Int = 0
var closure = {() -> Bool in return x < 10}
while closure() {
x += 1
print(x)
}
利用缩写机会使您的代码更加简洁和优雅。
var x = 0
let closure = { x < 10 }
while closure() {
x++
}
x // 10
我想使用闭包作为 while 循环的条件。这是我的:
var x: Int = 0
var closure = {() -> Bool in return x > 10}
while closure {
x += 1
println(x) // never prints
}
它从不打印任何东西。如果我把它改成closure()
,它也不起作用。
如有任何帮助,我们将不胜感激。
你需要用()
来调用闭包,而你的条件写错了,开头是false
(应该是x < 10
,不是x > 10
).更改为:
var x = 0
var closure: () -> Bool = { x < 10 }
while closure() {
++x
print(x)
}
这里有两个问题。
首先,如所写,您的代码甚至无法编译。您需要将 while closure
更改为 while closure()
。
第二,更大的问题,你的closure
逻辑是错误的。 x > 10
永远不会 returns true
因为 x
永远不会大于 10
。把标牌翻过来就可以了。
Swift 2
var x = 0
var closure = { () -> Bool in return x < 10 }
while closure() {
++x
print(x)
}
Swift 1.2
var x = 0
var closure = { () -> Bool in return x < 10 }
while closure() {
++x
println(x)
}
两个问题:
- 你的逻辑是倒退的。您想要在
x
小于10
时打印,因此: - 当您直接调用闭包时,就像调用函数一样,即使用括号。
更新代码,使用 Swift 2.0 测试:
var x: Int = 0
var closure = {() -> Bool in return x < 10}
while closure() {
x += 1
print(x)
}
利用缩写机会使您的代码更加简洁和优雅。
var x = 0
let closure = { x < 10 }
while closure() {
x++
}
x // 10