17294


myImageAという名前の画像をタッチするとカウント（scoreNum)が下がっていきそれ以外はカウントが上がっていくコードなのですが、画像以外（何もないところ。背景などの真っ白なところ）をタッチするとクラッシュしてしまいます。

その時 `let touchedImageView = touch!.view as!
UIImageView`の部分にエラーがあるとのことなのですが、自分では解決できず質問いたしました。

どのように書き換えればいいでしょうか？  
コードも直して書いていただけるとありがたいです。

背景は `self.view.backgroundColor = UIColor.whiteColor()`で白くしています。

[code]

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    　　　　let touch = touches.first as UITouch?
         // タッチしたUIImageViewを取得
         let touchedImageView = touch!.view as! UIImageView
    　　　　
    　　　　if touchedImageView.image == myImageA {
         　　　　scoreNum--
              return
    　　　　 }
          else {
          　　　　scoreNum++
          }
    }
    
[/code]


CC BY-SA 3.0
2015-10-05T14:44:30.790
17291
2015-10-05T16:19:17.260
2015-10-05T14:49:35.203
5337
11019
question
ios swift
swift 画像以外をタッチするとエラーが出てしまう。


示されている`let touchedImageView = touch!.view as! UIImageView`では`as!`
を使って`touch!.view`をUIImageViewへ強制的にキャストしようとしており、そのキャストが出来ない場合（touch!.viewがUIViewの場合など）にクラッシュしているだけだと思います。

`as?`を使いキャストが失敗するとnilを返すようにし、かつ`if let`のOptional
Bindingを使いnilでなければ処理を実行する条件文とすれば、とりあえず期待する動作をするのではないでしょうか？

[code]

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let touch = touches.first as UITouch?
        // タッチしたUIImageViewを取得
        if let touchedImageView = touch!.view as? UIImageView {
    
            if touchedImageView.image == myImageA {
                scoreNum--
                return
            } else {
      　        scoreNum++
            }
        } else {
      　    scoreNum++
        }
    }
    
[/code]

（どのようにOptionalを扱うのが最適かについては質問の答えではないと判断するため、とりあえず期待する動作をすることだけを目的としています）


CC BY-SA 3.0
2015-10-05T16:19:17.260
17294
2015-10-05T16:19:17.260
7374
17291
answer