我试图将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()
}
非常感谢您的帮助!
答案 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()