Swift可选绑定和SKNode.name

时间:2014-11-11 13:52:28

标签: swift sprite-kit optional sknode

有没有更好的方法来编写代码,我得到每个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"文件中设置为“”。

1 个答案:

答案 0 :(得分:3)

我认为name是一个可选字段 - 您可以使用nil coalescing operator

let actualChildName = eachChild.name ?? "Undefined"