问题
I need to schedule a Timer for firing a function every second but I see that in xcode 8 beta 3 the scheduledTimer is only available for iOS 10. Is there any alternative for using the timer in iOS 9 or previous versions?
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in print("Hi!")})
回答1:
Solved using
Timer.scheduledTimer(timeInterval: 1,
                           target: self,
                         selector: #selector(self.updateTime),
                         userInfo: nil,
                          repeats: true)
回答2:
Run a timer with 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()
}
Release the timer when you not use it.
Once scheduled on a run loop, the timer fires at the specified interval until it is invalidated. A nonrepeating timer invalidates itself immediately after it fires. However, for a repeating timer, you must invalidate the timer object yourself by calling its invalidate() method.
回答3:
Here is sample code workable with compatibility:
 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)
    }
//Your method or function:
// MARK: -  Method
@objc func myMethod() {
    print("Hi, How are you.")
}
回答4:
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)")
    }
}
回答5:
Updated for swift 3:
If you want to use Timer for some delay or any other purpose used below lines of code in your project;
// function defination:
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...")
}
// function call:
self.usedTimerForDelay()
NOTE:- you can change the time interval as you want.
//Enjoy coding..!
回答6:
Timer.scheduledTimer
Put it in the main thread.
回答7:
The correct form is:
Timer.scheduledTimer(withTimeInterval: 2, repeats: false){_ in
   "Here your code method"
}
来源:https://stackoverflow.com/questions/38695802/timer-scheduledtimer-swift-3-pre-ios-10-compatibility