我想使用闭包作为while循环的条件。这就是我所拥有的:
var x: Int = 0
var closure = {() -> Bool in return x > 10}
while closure {
x += 1
println(x) // never prints
}
它从不打印任何东西。如果我将其更改为closure()
,则它也无法正常工作。
任何帮助都将不胜感激。
答案 0 :(得分:4)
这里有两个问题。
首先,正如所写,你的代码甚至不会编译。您需要将while closure
更改为while closure()
。
其次,更大的问题是,你的closure
逻辑是错误的。 x > 10
永远不会返回true
,因为x
永远不会超过10
。翻转标志,它将起作用。
var x = 0
var closure = { () -> Bool in return x < 10 }
while closure() {
++x
print(x)
}
var x = 0
var closure = { () -> Bool in return x < 10 }
while closure() {
++x
println(x)
}
答案 1 :(得分:2)
您需要使用()
来调用此约会,并且您的条件是错误的,以便它在开始时false
(它应该是x < 10
,而不是x > 10
)。改为:
var x = 0
var closure: () -> Bool = { x < 10 }
while closure() {
++x
print(x)
}
答案 2 :(得分:2)
两个问题:
x
小于10
时进行打印,因此:使用Swift 2.0测试的更新代码:
var x: Int = 0
var closure = {() -> Bool in return x < 10}
while closure() {
x += 1
print(x)
}
答案 3 :(得分:1)
利用缩写机会,使您的代码更简洁,更优雅。
var x = 0
let closure = { x < 10 }
while closure() {
x++
}
x // 10