self.enumerateChildNodesWithName(spriteName) {
node, stop in
// Do something with node.
}
这是我正在查看的一些SpriteKit Swift代码的示例。
它看起来像是C#的lambda表达式,但我不确定。
我想知道的一部分是stop in
部分,它是什么?
我尝试在Swift文档中查找信息,但stop in
过于通用,无法找到任何信息。
什么是stop in
?它在做什么?
答案 0 :(得分:5)
该方法声明为:
func enumerateChildNodesWithName(_ name: String,
usingBlock block: (SKNode,
UnsafeMutablePointer<ObjCBool>) -> Void)
代码中{
和}
之间的部分是尾随闭包,即block
。 node
和stop
是参数名称。它也可以写成:
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)
您正在查看“尾随闭包”,其中node
和stop
是传递给闭包的两个参数。这是一种简化,简化了编写带闭包的代码的方式。在这种情况下,闭包用于评估每个子节点,因此node
参数是要评估的节点,stop
是一个允许闭包提前退出枚举的参数。
请参阅Closures并向下滚动到尾随关闭部分,以获得更全面的说明。
什么是停止?它在做什么?
如果仔细观察,stop
和in
的颜色不同,in
是关键字,stop
只是一个标识符。它可以很容易...n, s in...
。