有人可以在Swift中解释这种“停止”语法吗?

时间:2016-02-11 21:41:04

标签: swift closures

self.enumerateChildNodesWithName(spriteName) {
        node, stop in
        // Do something with node.

}

这是我正在查看的一些SpriteKit Swift代码的示例。

它看起来像是C#的lambda表达式,但我不确定。

我想知道的一部分是stop in部分,它是什么?

我尝试在Swift文档中查找信息,但stop in过于通用,无法找到任何信息。

什么是stop in?它在做什么?

2 个答案:

答案 0 :(得分:5)

该方法声明为:

func enumerateChildNodesWithName(_ name: String,
                  usingBlock block: (SKNode,
                                      UnsafeMutablePointer<ObjCBool>) -> Void)

代码中{}之间的部分是尾随闭包,即blocknodestop是参数名称。它也可以写成:

self.enumerateChildNodesWithName(spriteName) {
        node: SKNode, stop: UnsafeMutablePointer<ObjCBool> in

请参阅Swift指南中的Closures

stop参数是一种在枚举所有项目之前停止枚举的方法。有关详细信息,请参阅How to use "enumerateChildNodesWithName" with Swift in SpriteKit?。基本上,使用它的唯一方法是设置stop.memory = true以防止枚举下一个项目。如果您正在搜索项目并且已经找到了您正在寻找的项目,这非常有用。

答案 1 :(得分:3)

您正在查看“尾随闭包”,其中nodestop是传递给闭包的两个参数。这是一种简化,简化了编写带闭包的代码的方式。在这种情况下,闭包用于评估每个子节点,因此node参数是要评估的节点,stop是一个允许闭包提前退出枚举的参数。

请参阅Closures并向下滚动到尾随关闭部分,以获得更全面的说明。

  

什么是停止?它在做什么?

如果仔细观察,stopin的颜色不同,in是关键字,stop只是一个标识符。它可以很容易...n, s in...