각 SKNode의 이름을 얻는 코드를 작성하는 더 좋은 방법은 없습니까? 조금 길어 보입니다.Swift 옵션 바인딩 및 SKNode.name
// 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
이 문자열인지 알 수 있습니까? 당신이 강제로 unwrap하면 반환하는 값이 없으며 빈 문자열 ""
, 나는 그것을 반환 할 것이라고 생각했다.
EDIT2 : 그냥 안토니오 대답은 내가 후에 무엇인지 참으로하지만, 노드가 scene.SKS
파일에서 오는 SKNode.name
의 경우는 비록 어떤 이름이 노드를 지정하지 않은 것 같습니다 참고하기 여전히 이름은 ""
(빈 문자열)입니다. 당신이 코드를 실행하면 : 당신은 "Name"
또는 ""
를 부여받을 것 중 하나
let childName = eachChild.name ?? "Undefined"
당신이 eachChild.name = nil
을 설정하면 "Undefined"
를 얻을하지 않습니다 그리고 당신은 내가 이름 속성이지고 있다고 가정하고 "Undefined"
을 얻을 것이다 위의 코드를 실행 다른 값을 지정하지 않으면 *.sks
파일의 ""로 설정하십시오.
그래를, 가장 좋은 방법은 같다. (예를 들어 이것을 좀 더 기능적인 작업과 결합하여 이름 배열을 만들려면 단 한 줄만 있으면됩니다 : let namesArray = children.map {$ 0.name ?? "Undefined"}') –
그래,'map'의 좋은 사용법. 끝이없는 것들은 단지'map','filter','reduce'의 3 가지 방법으로 끝낼 수 있습니다 :) – Antonio
안토니오의 고맙습니다. – fuzzygoat