Я новичок в быстром программировании и не знаю, как вызывать метод через определенные промежутки времени. У меня есть демонстрационное приложение для обращения в службу поддержки, но я не знаю, как его вызывать через определенные промежутки времени.

5
Rishabh Srivastava 31 Июл 2014 в 13:53

3 ответа

Лучший ответ

Вы можете создать объект NSTimer () и вызвать функцию на определенном временном интервале следующим образом:

var updateTimer = NSTimer.scheduledTimerWithTimeInterval(15.0, target: self, selector: "callFunction", userInfo: nil, repeats: true)

Это будет вызывать callFunction () каждые 15 секунд.

func callFunction(){
    print("function called")
}
14
yoAlex5 21 Май 2019 в 20:54
1
Обратите внимание, что таймер останавливается, когда приложение переходит в фоновый режим.
 – 
Sunil Chauhan
16 Июн 2019 в 16:57

Вот простой пример с функциями запуска и остановки:

private let kTimeoutInSeconds:NSTimeInterval = 60

private var timer: NSTimer?

func startFetching() {
  self.timer = NSTimer.scheduledTimerWithTimeInterval(kTimeoutInSeconds,
    target:self,
    selector:Selector("fetch"),
    userInfo:nil,
    repeats:true)
}

func stopFetching() {
  self.timer!.invalidate()
}

func fetch() {
  println("Fetch called!")
}

Если вы получили исключение unrecognized selector, убедитесь, что ваш класс наследуется от NSObject, иначе селектор таймера не найдет функцию!

5
Zorayr 4 Сен 2015 в 09:10

Вариант таймера с блоком (iOS 10, Swift 4)

let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { (timer) in
    print("I am called every 5 seconds")
}

Не забудьте вызвать метод invalidate

timer.invalidate()

Подход GCD (с течением времени будет немного запаздывать)

func repeatMeWithGCD() {
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
        print("I am called every 5 seconds")

        self.repeatMeWithGCD()//recursive call
    }
}

Не забудьте создать условие возврата, чтобы предотвратить ошибку stackoverflow.

2
yoAlex5 12 Фев 2021 в 14:30