selector に指定するメソッドには、func updateClock() の前に @objc
が必要です。
参考: [Swift] @objcの話 [Objective-C] - Qiita
また、Timer 生成時の selector 引数に "updateClock" というメソッド名を表す文字列を指定していますが、Swift では #selector(updateClock)
と書くことが推奨されてます。
selector を文字列や、エラーメッセージにあるような Selector("updateClock")
で指定すると、コンパイル時にそのメソッドが存在するかや、そのメソッドが適切に宣言されてるか (@objc
が付いてるか) などのチェックができず、実行時のクラッシュの原因になります。
参考: Selector完全攻略、そして初学者特有のAddTarget()やAddObserver()のセレクタに変数を渡そうとする願望について - Qiita
diff
1- self.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: "updateClock", userInfo: nil, repeats: true)
2+ self.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateClock), userInfo: nil, repeats: true)
3
4- func updateClock() {
5+ @objc func updateClock() {
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/26 14:58