Swift中的Cast回调参数

时间:2014-06-17 20:21:22

标签: swift

我试图将SKNode转换为我自己的SKNode(Flag)子类。

scene.enumerateChildNodesWithName("flag") {
    node as Flag, stop in
        node.methodAvailableToFlagObject()
}

上面的代码会引发错误。有解决方案吗?

我试图避免这样做:

scene.enumerateChildNodesWithName("flag") {
    node, stop in 
        let realNode = node as Flag
        realNode.methodAvailableToFlagObject()
}

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您只能向上转换为父类型:

var closure : (Subclass) -> () = {
    (first : Superclass) in
}

你不能向下转型为子类

答案 1 :(得分:3)

怎么样

scene.enumerateChildNodesWithName("flag") {
    node,  stop in
    if let flag = node as? Flag {
        flag.methodAvailableToFlagObject()
    }
}

答案 2 :(得分:1)

您可以使用括号转换方法链,例如

(node as Flag).methodAvailabletoFlagObject()

...如果演员阵容失败,你甚至可以使用可选的铸造形式,然后将其与可选链接结合使用:

(node as? Flag)?.methodAvailableToFlagObject()