无法访问SKNode的子属性

时间:2016-05-26 01:43:11

标签: swift sprite-kit skspritenode sknode

我有一个for循环,可以通过 SKNode 的子项进行排序,出于某种原因,我只能访问 SKNode 的子属性,而不是 SKSpriteNode 属性,例如强制转换后的大小

for tile in map.children where tile is SKSpriteNode {
    let tileBody = CGRect(origin: tile.position, size: tile.size)
}

它说已经>作为 SKSpriteNode 的图块是 SKNode 。当它应该是 SKSpriteNode 时,它仍然像 SKNode 。有什么解决方法吗?

修改

我只是用

逼迫它
let tile = tile as! SKSpriteNode

这很有效。我还没有遇到任何问题,如果你认为这是一种不正确的投射方式,我很乐意听到它。

1 个答案:

答案 0 :(得分:0)

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/

我将假设" map"是一个SKNode(或它的一个子)。该文档清楚地表明children属性是一个只读的SKNode数组。你的"在哪里 - 是"只检查SKNode是否为SKSpriteNode,它不会投射任何东西。

一旦条件通过(因为当前迭代的SKNode可以向下转换为SKSpriteNode),您可以实际向下转发它。那就是你现在正在做的事情以及它为什么会起作用。您可以像现在这样安全地进行预测,因为您事先要检查它是否是SKSpriteNode。

编辑:这里有关于"的一些文件是"如果运算符只是一个返回true或false的运算符,它不会将该SKNode强制转换为SKSpriteNode并使其在内部范围内可用。

"使用类型检查运算符(is)检查实例是否属于某个子类类型。如果实例属于该子类类型,则类型检查运算符返回true,否则返回false。"

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html