使用闭包作为While循环的条件

时间:2015-07-16 23:43:49

标签: swift while-loop closures

我想使用闭包作为while循环的条件。这就是我所拥有的:

var x: Int = 0
var closure = {() -> Bool in return x > 10}
while closure {
    x += 1
    println(x) // never prints
}

它从不打印任何东西。如果我将其更改为closure(),则它也无法正常工作。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:4)

这里有两个问题。

首先,正如所写,你的代码甚至不会编译。您需要将while closure更改为while closure()

其次,更大的问题是,你的closure逻辑是错误的。 x > 10永远不会返回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 :(得分:2)

您需要使用()来调用此约会,并且您的条件是错误的,以便它在开始时false(它应该是x < 10,而不是x > 10)。改为:

var x = 0
var closure: () -> Bool = { x < 10 }
while closure() {
    ++x
    print(x)
}

答案 2 :(得分:2)

两个问题:

  1. 你的逻辑是倒退的。您希望在x小于10时进行打印,因此:
  2. 直接调用闭包时,就像使用函数一样,即使用括号。
  3. 使用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