从闭包返回一个布尔值

时间:2016-06-25 05:01:24

标签: swift closures

我一直在搜索Swift文档和谷歌搜索,但无法找到如何从这样的块返回值:

func checkIfplayerFellDown() -> Bool {
    self.enumerateChildNodesWithName("brick", usingBlock: {
        (node: SKNode!, stop: UnsafeMutablePointer <ObjCBool>) -> Bool in
        if (node.position.y < self.player.position.y) { return false }
    })
    return true
}

问题是因为我不了解块。我通常会这样使用它们:

world.enumerateChildNodesWithName("name") {node, stop in
        if (node.position.y < self.size.height*0.5) {
            node.removeFromParent()
        }
    }

如何从这些闭包中返回一个布尔值?我知道我应该在某个地方使用语法,我尝试了一些东西,但是没有一个能够工作,因为我不知道这些块是如何工作的。

赞赏任何解释或如何做到这一点的例子。

1 个答案:

答案 0 :(得分:2)

使用局部变量(在块外但在方法内)将结果传递出块,并在想要停止迭代时将stop设置为true

func playerFellDown() -> Bool {
    var result = true
    self.enumerateChildNodesWithName("brick") { (child, stopOut) in
        if child.position.y < self.player.position.y {
            result = false
            stopOut.memory = true
        }
    }
    return result
}