【问题标题】:Enumerate class members in Swift在 Swift 中枚举类成员
【发布时间】:2016-08-07 04:32:04
【问题描述】:

我正在使用 Swift 和 SpriteKit

我有一堂课:

class Button: SKShapeNode
{
}

我还有一些按钮:

var button1 = Button()
var button2 = Button()

而且我已经使用了这些节点的“.name”:

button1.name = "button1"
button2.name = "button2"

所以通常情况下,我用enumerateChildNodesWithName("button") 枚举那些节点,但在这里,名称已经被占用,所以我如何枚举我的所有按钮(使用类 Button)?

【问题讨论】:

    标签: swift class sprite-kit member skshapenode


    【解决方案1】:

    您可以通过调用enumerateChildNodesWithName//* 作为节点名称来枚举给定节点的所有子节点。这在 Apple 的文档 here 中被列为示例。

    然后在块中检查节点是否为Button 类型并相应地执行您的操作。

    所以是这样的:

    myNode.enumerateChildNodesWithName("//*") { node, ptr in
        if node is Button {
            // do something here
        }
    }
    

    【讨论】:

    • 谢谢,我不知道这个方法!你为什么要使用 ptr ?我一直用_,它有什么变化?
    • 闭包中的第二个参数是一个指向布尔变量的指针,该变量可以设置为 true 以提前终止枚举。如果您不打算使用第二个参数,最好使用 _ 忽略它。在您的情况下,您希望搜索所有节点,因此您不需要提前终止。
    • 您也可以使用.children 属性代替enumerateChildNodesWithName
    【解决方案2】:

    可以使用节点的children属性:

    var buttonNodes = node.children.filter { $0 is Button }

    完整示例:

    import UIKit
    import SpriteKit
    
    let node = SKNode()
    
    class Button: SKNode {
    }
    
    let button1 = Button()
    let button2 = Button()
    let label = SKLabelNode()
    
    node.addChild(button1)
    node.addChild(button2)
    node.addChild(label)
    
    let buttons = node.children.filter { $0 is Button }
    print(buttons.count) // buttons only has 2 elements, the button nodes!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多