使用闭包作为 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)
}

两个问题:

  1. 你的逻辑是倒退的。您想要在 x 小于 10 时打印,因此:
  2. 当您直接调用闭包时,就像调用函数一样,即使用括号。

更新代码,使用 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