web-dev-qa-db-ja.com

Swift 3タイマーが作動しない

私はSwiftでタイマーを利用しようと試みてきましたが、それを次のように単純化しました。

func startTimer () {
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.test), userInfo: nil, repeats: true)
}
func test () {
    print("FIRED")
}

別の関数からこれを呼び出して、startTimer関数が機能することを確認しましたが、タイマーは起動しません。これはRunLoopと関係がありますか?私はコーディングが初めてなので、説明をいただければ幸いです。

10
Oliver Hickman

良い習慣:startTimer()で、タイマーがまだ作成されていないことを確認し、割り当てを行います。 stopTimer()で、invalidateを呼び出す前にタイマーが存在することを確認し、タイマーをnilに戻します。

また、セレクターには@objcプレフィックス。提供されたコードを使用して、作動中のタイマーを取得できるはずです。ハッピーコーディング!

class SomeClass {
    var timer: Timer?

    func startTimer() {
        guard timer == nil else { return }
        timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(test), userInfo: nil, repeats: true)
    }

    func stopTimer() {
        guard timer != nil else { return }
        timer?.invalidate()
        timer = nil
    }

    @objc func test() {

    }
}
19
Alex Blair