webentwicklung-frage-antwort-db.com.de

Timer.scheduledTimer Swift 3 vor iOS 10 Kompatibilität

Ich muss einen Timer festlegen, um jede Sekunde eine Funktion auszulösen, aber ich sehe, dass der ScheduledTimer in xcode 8 Beta 3 nur für iOS 10 verfügbar ist. Gibt es eine Alternative für die Verwendung des Timers in iOS 9 oder früheren Versionen?

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

Gelöst mit

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

Starte einen Timer mit 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()
}

Lassen Sie den Timer los, wenn Sie ihn nicht benutzen.

Sobald ein Zeitplan für eine Ausführungsschleife erstellt wurde, wird der Zeitgeber im angegebenen Intervall ausgelöst, bis er ungültig wird. Ein nicht wiederholter Timer macht sich sofort nach dem Auslösen selbst ungültig. Für einen sich wiederholenden Zeitgeber müssen Sie das Zeitgeberobjekt jedoch selbst ungültig machen, indem Sie seine invalidate () -Methode aufrufen.

15
Kris Roofe

Hier ist ein Beispielcode, der kompatibel ist:

 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)
    }

// Ihre Methode oder Funktion:

// MARK: -  Method

@objc func myMethod() {

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

Aktualisiert für Swift 3:

Wenn Sie Timer für eine Verzögerung oder einen anderen Zweck verwenden möchten, der unterhalb der Codezeilen in Ihrem Projekt verwendet wird;

// Funktionsdefinition:

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...")

}

// Funktionsaufruf:

self.usedTimerForDelay()

HINWEIS: - Sie können das Zeitintervall beliebig ändern.

// Viel Spaß beim Programmieren ..!

3
Kiran jadhav

Swift

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)")
    }
}
3
hhamm
Timer.scheduledTimer

Lege es in den Hauptfaden.

1
senlinmu