Я знаю, что опоздал на эту вечеринку. Но я обнаружил, что люди не упоминают нить сна. Если вы используете GCD для вызова этой функции. Вы можете использовать:
[NSThread sleepForTimeInterval:2.0f];
чтобы задержать нить на 2 секунды.
[self changeText: @"A text"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Here your non-main thread.
[NSThread sleepForTimeInterval:2.0f];
dispatch_async(dispatch_get_main_queue(), ^{
//Here you returns to main thread.
[self changeText: @"Another text"];
});
});
Изменить 2 (февраль 2015 г.):
Я думаю, что NSTimer - отличное решение. Мое решение просто дает еще один вариант для достижения цели NSTimer.
Пожалуйста, прочитайте: Как мне использовать NSTimer?
[NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(doSomethingWhenTimeIsUp:)
userInfo:nil
repeats:NO];
В классе вам нужен этот метод:
- (void) doSomethingWhenTimeIsUp:(NSTimer*)t {
// YES! Do something here!!
}
Изменить 3 (май 2016 г.):
В Swift 2.0 вы можете использовать этот способ:
NSTimer.scheduledTimerWithTimeInterval(2.0,
target: self,
selector: "doSomethingWhenTimeIsUp:",
userInfo: nil,
repeats: false)
Создает сущность NSTimer и автоматически добавляет таймер в NSRunLoop, связанный с NSThread, в котором создается таймер.
Изменить 4 (июнь 2016 г.):
В Swift 2.2 способ вызова select:
#selector(doSomethingWhenTimeIsUp(_:))
Итак, это что-то вроде:
NSTimer.scheduledTimerWithTimeInterval(2.0,
target: self,
selector: #selector(doSomethingWhenTimeIsUp()),
userInfo: nil,
repeats: false)
Изменить 5 (октябрь 2016 г.):
В Swift 3 способ вызова select:
#selector(doSomethingWhenTimeIsUp)
Итак, это что-то вроде:
Timer.scheduledTimer(timeInterval: 2.0,
target: self,
selector:#selector(doSomethingWhenTimeIsUp),
userInfo: nil,
repeats: false)
Тогда функция должна выглядеть так:
@objc private func doSomethingWhenTimeIsUp(){
// Do something when time is up
}
Изменить 6 (май 2018 г.):
В Swift 4 мы можем сделать, как показано ниже.
let delaySeconds = 2.0
DispatchQueue.main.asyncAfter(deadline: .now() + delaySeconds) {
doSomethingWhenTimeIsUp()
}
Тогда функция должна выглядеть следующим образом:
private func doSomethingWhenTimeIsUp(){
// Do something when time is up
}