有没有更好的方法来编写代码,我得到每个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!)")
}
我知道斯威夫特是关于安全的,但感觉就像我陷入了代码陷入困境,并且想知道我是否有遗漏的东西?
修改
我注意到即使SKNode.name
是一个字符串?如果你强行打开它并且没有值它会返回并清空String ""
,我认为它会返回nil。
EDIT2:
只是要注意安东尼奥的答案确实是我所追求的,但是在SKNode.name
的情况下,当节点来自scene.SKS
文件时,似乎即使没有指定名称,节点仍然获取名称""
(空字符串)。如果您运行代码:
let childName = eachChild.name ?? "Undefined"
您将获得给定的"Name"
或""
,您永远不会获得"Undefined"
如果您设置eachChild.name = nil
并运行上面的代码,您将获得{{1}我假设如果没有指定其他值,则name属性在"Undefined"
文件中设置为“”。
答案 0 :(得分:3)
我认为name
是一个可选字段 - 您可以使用nil coalescing operator:
let actualChildName = eachChild.name ?? "Undefined"