2016-08-17 5 views
1

私は私のコードとしてこれを持っている:スイフト。どのようにnode.childrenの型を取得するのですか?

for child in viewsArray[i].children { 
    let childNode = child as! SKSpriteNode 
    if childNode.color == UIColor.blackColor() && childNode.alpha == 1 { 
     childNode.alpha = 0.5 
    } 
} 

それは私にこのエラーを与える:

Could not cast value of type 'SKCropNode' (0x1a04415a0) to 'SKSpriteNode' (0x1a0441230).

だから私の質問は、私はlet childNode = child as! SKSpriteNodeを書く前に、私は子供のタイプを確認することができる方法なので、私ができますこのエラーを避ける?約

答えて

1

はどのように:

for child in viewsArray[i].children { 
    guard let childNode = child as? SKSpriteNode else { continue } 
    if childNode.color == UIColor.blackColor() && childNode.alpha == 1 { 
     childNode.alpha = 0.5 
    } 
} 
+4

ああです!ドキュメントを参照してください! "ガードステートメントのelse節が必要であり、noreturn属性でマークされた関数を呼び出すか、ガードステートメントの囲みスコープの外側にあるreturn program、return、break、continue、throwのいずれかのステートメントを使用して関数を呼び出す必要があります。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html – ncke

+2

ガードの優れた使い方 – Knight0fDragon

3

あなたは関数型プログラミングを使用したい場合は、ここでのコードはい、それは意志

viewsArray[i].children 
    .flatMap { $0 as? SKSpriteNode } 
    .filter { $0.color == .blackColor() && $0.alpha == 1 } 
    .forEach { $0.alpha = 0.5 } 
関連する問題