34 votes

Timer.scheduledTimer swift 3 pré-compatibilité iOS 10

J'ai besoin de programmer un Timer pour déclencher une fonction toutes les secondes mais je vois que dans xcode 8 beta 3 le scheduledTimer est seulement disponible pour iOS 10. Existe-t-il une alternative pour utiliser le timer dans iOS 9 ou les versions précédentes ?

Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in print("Hi!")})

57voto

rockdaswift Points 4800

Résolu en utilisant

Timer.scheduledTimer(timeInterval: 1,
                           target: self,
                         selector: #selector(self.updateTime),
                         userInfo: nil,
                          repeats: true)

17voto

Kris Roofe Points 13087

Lancez une minuterie avec swift3,

var timer: Timer?

func startTimer() {

    if timer == nil {
        timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.loop), userInfo: nil, repeats: true)
    }
}

func stopTimer() {
    if timer != nil {
        timer?.invalidate()
        timer = nil
    }
}

func loop() {
    let liveInfoUrl = URL(string: "http://192.168.1.66/api/cloud/app/liveInfo/7777")
    let task = URLSession.shared.dataTask(with: liveInfoUrl! as URL) {data, response, error in
        guard let data = data, error == nil else { return }
        print(String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) ?? "aaaa")
    }
    task.resume()
}

Relâchez la minuterie lorsque vous ne l'utilisez pas.

Une fois programmée dans une boucle d'exécution, la minuterie se déclenche à l'intervalle spécifié jusqu'à ce qu'elle soit invalidée. spécifié jusqu'à ce qu'il soit invalidé. Une minuterie non répétitive s'invalide elle-même immédiatement après son déclenchement. En revanche, pour une minuterie répétitive, vous devez devez invalider vous-même l'objet minuterie en appelant sa méthode invalidate(). en appelant sa méthode invalidate().

8voto

Incredible_Dev Points 696

Voici un exemple de code utilisable avec la compatibilité :

 if #available(iOS 10.0, *) {

        Timer.scheduledTimer(withTimeInterval: 15.0, repeats: true){_ in

            // Your code is here:
            self.myMethod()
        }
    }
    else {

        Timer.scheduledTimer(timeInterval: 15.0, target: self, selector: #selector(self.myMethod), userInfo: nil, repeats: true)
    }

//Votre méthode ou fonction :

// MARK: -  Method

@objc func myMethod() {

    print("Hi, How are you.")
}

3voto

hhamm Points 114

Swift 3

func runCode(in timeInterval:TimeInterval, _ code:@escaping ()->(Void))
{
    DispatchQueue.main.asyncAfter(
        deadline: .now() + timeInterval,
        execute: code)
}

func runCode(at date:Date, _ code:@escaping ()->(Void))
{
    let timeInterval = date.timeIntervalSinceNow
    runCode(in: timeInterval, code)
}

func test()
{
    runCode(at: Date(timeIntervalSinceNow:2))
    {
        print("Hello")
    }

    runCode(in: 3.0)
    {
        print("World)")
    }
}

3voto

Kiran jadhav Points 1525

Mis à jour pour le martinet 3 :

Si vous voulez utiliser Timer pour un délai ou tout autre but, utilisez les lignes de code ci-dessous dans votre projet ;

// définition de la fonction :

func usedTimerForDelay()  {
    Timer.scheduledTimer(timeInterval: 0.3,
                         target: self,
                         selector: #selector(self.run(_:)),
                         userInfo: nil, 
                         repeats: false)
}

func run(_ timer: AnyObject) {
      print("Do your remaining stuff here...")

}

// appel de fonction :

self.usedTimerForDelay()

NOTE:- vous pouvez modifier l'intervalle de temps comme vous le souhaitez.

//Enjoyez le codage !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X