Есть ли лучший способ написать код, в котором я получаю имя каждого 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 — это все о безопасности, но мне просто кажется, что я увяз в коде и задаюсь вопросом, есть ли что-то, что я упускаю?
EDIT: я заметил, что хотя SKNode.name
является строкой? если вы принудительно развернете его, и он не имеет значения, он возвращает пустую строку ""
, я думал, что она вернет ноль.
EDIT2: Просто отметим, что ответ Антонио действительно то, что мне было нужно, но в случае SKNode.name
, когда узел поступает из файла scene.SKS
, кажется, что даже если имя не указано, узел по-прежнему получает имя ""
(пустая строка). Если вы запустите код:
let childName = eachChild.name ?? "Undefined"
Вы либо получите данное "Name"
, либо ""
, вы никогда не получите "Undefined"
Если вы установите eachChild.name = nil
и запустите приведенный выше код, вы получите "Undefined"
Я предполагаю, что свойство имени получает значение "" в файле *.sks
, если нет другого значения указано.