こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Swiftについて教えてください

viewのタップを検知したいと思い以下のようにし、ビルドには成功するのですが、シミュレーターでクリックすると落ちてしまいます。terminating with uncaught exception of type NSExceptionと表示されるので、これで検索したのですが、解決に至りませんでした。
回答よろしくお願いします。swift 1.2です。

import UIKit

class ViewController: UIViewController,UIGestureRecognizerDelegate {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

/* シングルタップ */
let tapGesture = UITapGestureRecognizer(target: self, action: "myView_Tapped:")

// デリゲートをセット
tapGesture.delegate = self

// ビューにジェスチャーを追加
self.view.addGestureRecognizer(tapGesture)


func myView_Tapped(sender: UITapGestureRecognizer){
// 処理
println("タップ")
}


}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


}

投稿日時 - 2016-02-01 05:42:36

QNo.9120436

すぐに回答ほしいです

質問者が選んだベストアンサー

viewDidLoadの終了の閉じカッコ「}」の位置に注目してください。
質問のコードでは、myView_TappedはviewDidLoadの内部に定義されています。
myView_TappedをviewDidLoadの外(で、かつViewControllerの内部)に定義すれば問題なく動作するはずです。

swiftは関数の中に関数を定義することができます(これをネスト関数と言います)が、定義元の関数を終了するとそのネスト関数は消滅します。このため、タップされた時にネスト関数を呼び出そうとしても既に存在しないことになります。ネスト関数をプロパティに保持しておけば、消滅せずタップ処理時に呼び出すことも可能ですが、今回はそのようなことをするつもりはなくて、たまたま閉じカッコの位置を間違えただけなのだろうと思います。

投稿日時 - 2016-02-01 22:21:24

お礼

回答ありがとうございました。viewDidLoadの中で定義していたことを分かってませんでした。

投稿日時 - 2016-02-02 05:48:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)