2016-08-10 8 views
0

アクションのスピード値をアンラップして10タップごとに増加させようとしていますが、 '?'を使用すると変化しません。 "スピード"の前に。私が '!'それは「オプションの値をアンラップ」エラー」がスローされます。私はこの問題を解決することができますか? ここに私のコードですSpriteKit Unwrap

スウィフトは、ランタイムエラーをスローし、オプションの値をアンラップするときはnilを見つけることについて不平を言う
for child in self.children as! [SKSpriteNode] { 
     if let block: SKSpriteNode = child as? SKSpriteNode { 
      if (tapCount == 10) { 
       block.action(forKey: "seq")?.speed += 0.5 
       block.action(forKey: "seq2")?.speed += 0.5 
       print(block.action(forKey: "seq2")?.speed) 
       tapCount = 0 
       print("YES") 
      } 
     } 
    } 
+0

あなたの子供は既にSKSpriteNode(あなたは警告が必要です)ので、最初の 'if'は不要です。しかし、SKSpriteNodeが子供に配置されると、あなたのように!キャストは失敗します – Knight0fDragon

+0

これらは常にSKSpriteNodeになりますので、使用してください。最初のifは不必要だと私は同意する。もともとSKSpriteNodeのサブクラスにキャストするために使用されていましたが、今は役に立たないです。ありがとう! – Nas5296

+1

ちょうどそれが良い練習ではないと言って、道路を6ヶ月、あなたの心を変え、SKLabelNodeとbamを追加するかもしれません。あなたはなぜそれが壊れているのか理解できず、見た目が簡単すぎるので、あなたは戻っています。また、 !問題ではない、SKSpriteNodeへのキャストが問題です。私は残して言う、キャストを削除する – Knight0fDragon

答えて

0

は、それがあることを意味しますあなたのコードnilのとき、非ゼロであることを、いくつかのオプションの値を取る

本当に小さな一言で言えば:。

  • ?手段:アンラップしようとすると、それが失敗した場合は、続行しないでください
  • !の意味は、nilではないことを保証しているためです。

あなたの質問に答えるには:block.action(forKey: "seq2")はnilを返します。速度を変更したい動作は存在しません。


?!事業者があなたを混乱に聞こえる場合は、私はAppleのSwift Programming Language文書を読んでお勧めします。 Swiftは、潜在的に欠けている値に対処するためのツールを提供しています。