有没有更好的方法来编写我得到每个 SKNode 名称的代码,它似乎有点啰嗦。
// eachChild is an SKNode
for eachChild in children {
var theActualChildName: String
if let childName = eachChild.name {
theActualChildName = childName
} else {
theActualChildName = "Undefined"
}
println("NODE NAME = \(theActualChildName)")
}
我可以写,(见下文)即使没有名字也能工作,但如果感觉不好,因为它强制解开一个可选项。
// eachChild is an SKNode
for eachChild in children {
println("NODE NAME = \(eachChild.name!)")
}
我知道 Swift 是关于安全的,但感觉就像我陷入了代码的困境,想知道我是否遗漏了什么?
编辑:
我注意到即使SKNode.name是字符串?如果您强制打开它并且它没有返回值并且为空 String "",我认为它会返回 nil。
EDIT2:
请注意,Antonio 的答案确实是我所追求的,但是在SKNode.name节点来自scene.SKS文件的情况下,似乎即使没有指定名称,节点仍然会获得名称""(空字符串)。如果你运行代码:
let childName = eachChild.name ?? "Undefined"
您将获得给定的"Name"或"",您将永远不会获得"Undefined"如果您设置eachChild.name = nil并运行上面的代码,您将获得"Undefined"我假设*.sks如果没有指定其他值,文件中的 name 属性将设置为“”。