2016-06-25 83 views
0

我已经斯威夫特文档中被搜索和谷歌搜索,但无法找到如何从这样的块返回值:从封闭返回布尔

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() 
     } 
    } 

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

任何解释或如何完成这个例子表示赞赏。

+0

她的第一个代码块将不起作用,因为块内的“返回false”从块返回,但不会使'enumerateChildNodesWithName'完全返回,也不会使'checkIfplayerFellDown'函数返回false。实际上,它会导致编译时错误,因为块必须返回void,而不是布尔值。 –

回答

2

使用局部变量(块外,但里面的方法)将结果传递出块,并设置stoptrue当你想停止迭代:

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 
}