web-dev-qa-db-fra.com

Swift 3 La minuterie ne se déclenche pas

J'ai essayé d'utiliser Timer dans Swift et j'ai simplifié la ville comme suit:

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

Je voudrais appeler cela à partir d'une autre fonction et j'ai vérifié que la fonction startTimer fonctionne, mais la minuterie ne se déclenche pas. Cela a-t-il quelque chose à voir avec le RunLoop? Je suis assez nouveau dans le codage, donc toute explication serait appréciée.

10
Oliver Hickman

Bonne pratique: dans startTimer (), vérifiez que le temporisateur n'a pas déjà été créé et effectuez l'affectation. Dans stopTimer (), vérifiez que le minuteur existe avant d'appeler invalidate et remettez-le à zéro.

De plus, pour votre sélecteur, assurez-vous que vous disposez du @objc préfixe. Vous devriez pouvoir obtenir une minuterie de travail avec le code fourni. Bon codage!

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