Я новичок в быстром программировании и не знаю, как вызывать метод через определенные промежутки времени. У меня есть демонстрационное приложение для обращения в службу поддержки, но я не знаю, как его вызывать через определенные промежутки времени.
3 ответа
Вы можете создать объект NSTimer () и вызвать функцию на определенном временном интервале следующим образом:
var updateTimer = NSTimer.scheduledTimerWithTimeInterval(15.0, target: self, selector: "callFunction", userInfo: nil, repeats: true)
Это будет вызывать callFunction () каждые 15 секунд.
func callFunction(){
print("function called")
}
Вот простой пример с функциями запуска и остановки:
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, иначе селектор таймера не найдет функцию!
Вариант таймера с блоком (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.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.