如何 运行 在一个函数中将两个 enumerateNodes 放在一起

How to run two enumerateNodes together in a function

我想 运行 在一个函数中同时枚举 2 个 ChildNodes 代码。目前,两个枚举代码都有效!

func change() {

scene?.enumerateChildNodes(withName: "//*one*") {
(node, stop) in
node.name = "two"
}

scene?.enumerateChildNodes(withName: "//*two*") {
(node, stop) in
 node.name = "one"
}
}

但是,由于第一次枚举将 node.name 更改为“二”,这将触发第二次枚举并将 node.name 改回“一”。

如何避免这种情况?

我希望函数按如下方式工作:

当前名称为“two”的节点,更改为“one”

当前名称为“one”的节点,更改为“two”

谢谢!

据我所知,没有办法同时 运行 它们并记住每个状态并且仅在适用时更改名称 如果它们都是某个子 class 的对象,您可以在 class 中放置一个 属性 并检查 属性

func change() {

    scene?.enumerateChildNodes(withName: "//*one*") { (node, stop) in
        if node is SomeInGameSubClass {
            node.isSwapped = true
            node.name = "two"
        }
    }

    scene?.enumerateChildNodes(withName: "//*two*") { (node, stop) in
        if node is SomeInGameSubClass {
            if !node.isSwapped {
                node.name = "one"
            }
            else {
                node.isSwapped = false
            }
        }
    }
}

或者只是将第一组转换为任意名称,转换第二组然后返回并再次转换第一组

func change() {

    scene?.enumerateChildNodes(withName: "//*one*") { (node, stop) in
        node.name = "temp"
    }

    scene?.enumerateChildNodes(withName: "//*two*") { (node, stop) in
        node.name = "one"
    }

    scene?.enumerateChildNodes(withName: "//*temp*") { (node, stop) in
        node.name = "two"
    }
}