gpt4 book ai didi

swift - 无法访问 SKNode 的子属性

转载 作者:行者123 更新时间:2023-11-28 08:36:56 25 4
gpt4 key购买 nike

我有一个 for 循环,可以对 SKNode 的子节点进行排序,出于某种原因,我只能访问 SKNode 的子节点的属性,而不能访问 >SKSpriteNode 属性,例如 casting 后的大小。

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

这奏效了。我还没有遇到任何问题,如果您认为这是一种不正确的转换方式,我很乐意听到。

最佳答案

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

我假设“map”是一个 SKNode(或其子节点)。文档清楚地表明 children 属性是 SKNode 的只读数组。您的“where - is”仅检查 SKNode 是否为 SKSpriteNode,它不会转换任何内容。

一旦条件通过(因为当前迭代的 SKNode 可以向下转换为 SKSpriteNode),您就可以实际向下转换它了。这就是您现在正在做的事情,也是它起作用的原因。您可以像现在这样安全地强制向下转换,因为您正在事先检查它是否是 SKSpriteNode。

编辑:这里有一些关于您正在使用的“is”运算符的文档,它只是一个返回 true 或 false 的运算符,它不会将该 SKNode 转换为 SKSpriteNode 并使其在内部范围内可用。

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

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

关于swift - 无法访问 SKNode 的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com