在我的SKScene中,我想检查是否有特定类型的节点。因为我多次需要这样的东西,所以我试图创建以下函数,它接受一个类型作为函数,但它不编译,有什么帮助吗?

extension SKNode {
    func containsObject(ofType type: Any) -> Bool {
        return children.contains(where {$0 is type}) ? true : false
    }
}

错误:
使用未声明的类型“type”

最佳答案

您需要将函数设为泛型函数,并检查泛型类型参数而不是输入参数。

extension SKNode{
    func containsObject<T>(ofType: T.Type) -> Bool {
        return children.contains(where: {$0 is T})
    }
}

这就是你所说的:
let node  = SKNode()

class MyNode: SKNode {
    var title = ""
}

let myNode = MyNode()
node.addChild(myNode)

node.containsObject(ofType: MyNode.self) //returns true

let otherNode = SKNode()
otherNode.addChild(SKNode())
otherNode.containsObject(ofType: MyNode.self) //returns false

关于ios - 检查场景是否包含特定类型的节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45837100/

10-09 02:39