質問: myImageA { scoreNum-- return } else { scoreNum++ } } ```
回答: 示されている`let touchedImageView = touch!.view as! UIImageView`では`as!` を使って`touch!.view`をUIImageViewへ強制的にキャストしようとしており、そのキャストが出来ない場合(touch!.viewがUIViewの場合など)にクラッシュしているだけだと思います。 `as?`を使いキャストが失敗するとnilを返すようにし、かつ`if let`のOptional Bindingを使いnilでなければ処理を実行する条件文とすれば、とりあえず期待する動作をするのではないでしょうか? ``` override func touchesBegan(touches: Set, 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++ } } ``` (どのようにOptionalを扱うのが最適かについては質問の答えではないと判断するため、とりあえず期待する動作をすることだけを目的としています)