Swift 将闭包用作While循环';s状态

Swift 将闭包用作While循环';s状态,swift,while-loop,closures,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(),它也不起作用 如果有任何帮助,我们将不胜感激。您需要使用()调用关闭,并且您的情况是错误的,因此在开始时是错误的(应该是x10)。改为

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

var x: Int = 0
var closure = {() -> Bool in return x > 10}
while closure {
    x += 1
    println(x) // never prints
}
它从不打印任何东西。如果我将其更改为
closure()
,它也不起作用


如果有任何帮助,我们将不胜感激。

您需要使用
()
调用关闭,并且您的情况是错误的,因此在开始时是
错误的
(应该是
x<10
,而不是
x>10
)。改为:

var x = 0
var closure: () -> Bool = { x < 10 }
while closure() {
    ++x
    print(x)
}
var x=0
变量闭包:()->Bool={x<10}
whileclosure(){
++x
打印(x)
}

这里有两个问题

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

其次,更大的问题是,您的
闭包
逻辑是错误的
x>10
从不返回
true
,因为
x
从不大于
10
。把牌子翻过来就行了

斯威夫特2
var x=0
var closure={()->Bool返回x<10}
whileclosure(){
++x
打印(x)
}
Swift 1.2
var x=0
var closure={()->Bool返回x<10}
whileclosure(){
++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:Int=0
    var closure={()->Bool返回x<10}
    whileclosure(){
    x+=1
    打印(x)
    }
    
    利用缩写的机会使您的代码更加简洁、优雅

    var x = 0
    let closure = { x < 10 }
    while closure() {
      x++
    }
    x // 10
    
    var x=0
    let闭包={x<10}
    whileclosure(){
    x++
    }
    x//10
    
    可以说,我可能更喜欢这样,因为
    var closure={val:Int->Bool返回val<10}
    ,然后<代码>而闭包(x){…
    我更喜欢0中x的
    。。
    
    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