2016-08-01 6 views
22

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

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

ответ

44

решаемые с помощью

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

Если вы хотите, вы можете использовать 'if #available (iOS 10, *) {// iOS 10 code} else {// iOS 9 code}' для поддержки обоих в зависимости от версии ОС. – Awesomeness

+0

Мне нужно было добавить функцию записи следующим образом: '@objc func updateTime() {}' – Jonny

+0

Также стоит посмотреть на нижние сообщения, чтобы посмотреть, как таймер остановлен. Он не может быть удален из цикла запуска правильно, если он не удаляется вручную. – kbpontius

-4

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

Timer.scheduledTimer(withTimeInterval: 2, repeats: false){_ in 
    "Here your code method" 
} 
+3

Это не работает на iOS 9, но вопрос был задан для hhamm

+1

Хорошо, код работает на swift 3 –

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

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

+1

Отличная работа, указывающая на '.invalidate()' конец таймера, а также цикл выполнения. – kbpontius

+0

Проверка нуля для таймера не требуется. Это уже необязательно. –

2

Обновлено для быстрой 3:

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

// Функция 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...") 

} 

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

self.usedTimerForDelay() 

Примечание: - Вы можете изменить интервал времени, как вы хотите.

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

0

Вот пример кода работоспособным с совместимостью:

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

 Смежные вопросы

  • Нет связанных вопросов^_^