我对下面的代码发生了什么感到有些困惑。我认为children
基于node.children
(类型为[AnyObject]
)属于[SKNode]
类型的children
是可选的,我看到的是{{1}永远不会nil
,这是因为[AnyObject]
不包含任何类型信息?即使我将[SKNode]
更改为[NSString]
,它仍会转到(1)?
if let children = node.children as? [SKNode] {
// (1) STUFF WITH SKNODE...
} else {
// (2) NOPE, ITS NOT AN SKNODE
答案 0 :(得分:3)
node.children
不是可选的。它总是返回一个类型为[AnyObject]
的数组。如果没有子节点,则此数组将具有0个元素。如果有子项,则此数组将包含SKNode
s。
可选绑定if let children = node.children as? [SKNode]
将始终成功,因为可以将空数组[AnyObject]
强制转换为[SKNode]
。
当我第一次看到node.children
正在返回[AnyObject]
而不是[SKNode]
时,我认为这很奇怪。然后我意识到这是一个与Cocoa Touch
一起使用的Objective-C
接口,因此它无法返回[SKNode]
,即使它是它所包含的内容。