Timer.scheduledTimer Swift 3 до совместимости с iOS 10

Мне нужно запланировать таймер для срабатывания функции каждую секунду, но я вижу, что в xcode 8 beta 3 запланированный таймер доступен только для iOS 10. Есть ли альтернатива использованию таймера в iOS 9 или предыдущих версиях?

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

Ответы на вопрос(7)

Timer.scheduledTimer

Поместите это в основной поток.

Решение Вопроса

Решено с помощью

Timer.scheduledTimer(timeInterval: 1,
                           target: self,
                         selector: #selector(self.updateTime),
                         userInfo: nil,
                          repeats: true)
 Jonny29 мар. 2017 г., 05:35
Мне нужно было добавить написать целевой функции, как это:@objc func updateTime() {}
 kbpontius11 июн. 2017 г., 10:03
Стоит также посмотреть на нижние посты, чтобы увидеть, как останавливаются таймеры. Он не может быть удален из цикла выполнения должным образом, если он не удален вручную.
 Awesomeness21 февр. 2017 г., 22:41
Если вы хотите, вы можете использоватьif #available(iOS 10, *) { //iOS 10 code } else { //iOS 9 code } поддерживать оба в зависимости от версии ОС.

Запустите таймер с 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()
}

Отпустите таймер, когда вы его не используете.

Будучи запланированным в цикле выполнения, таймер срабатывает с указанным интервалом до тех пор, пока он не станет недействительным. Неповторяющийся таймер аннулирует себя сразу после его срабатывания. Однако для повторяющегося таймера вы должны самостоятельно аннулировать объект таймера, вызвав его метод invalidate ().

 kbpontius11 июн. 2017 г., 10:04
Отличная работа, указывая на.invalidate() конец таймера, а также цикл выполнения.
 Adrian Bartholomew26 февр. 2018 г., 06:42
Нулевая проверка таймера не нужна. Это уже необязательно.

Правильная форма:

Timer.scheduledTimer(withTimeInterval: 2, repeats: false){_ in
   "Here your code method"
}
 hhamm03 февр. 2017 г., 23:40
Это не работает на iOS 9, но вопрос задан для совместимости <iOS 10
 Bijender Singh Shekhawat15 нояб. 2018 г., 12:18
Этот код работает на Swift 4.2 также .. Спасибо за это.
 Raj Joshi24 февр. 2017 г., 10:44
Хорошо, код работает на Swift 3

Свифт 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)")
    }
}

Обновлено для Swift 3:

Если вы хотите использовать Таймер для некоторой задержки или для любой другой цели, используйте приведенные ниже строки кода в вашем проекте;

// определение функции:

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

}

// вызов функции:

self.usedTimerForDelay()

ПРИМЕЧАНИЕ: - вы можете изменить временной интервал, как вы хотите.

// Наслаждайтесь кодированием ..!

Вот пример кода, работающего с совместимостью:

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

// Ваш метод или функция:

// MARK: -  Method

@objc func myMethod() {

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

Ваш ответ на вопрос