0

有没有更好的方法来编写我得到每个 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 属性将设置为“”。

4

1 回答 1

3

我认为这name是一个可选字段 - 您可以使用nil 合并运算符

let actualChildName = eachChild.name ?? "Undefined"
于 2014-11-11T13:54:38.250 回答