Функция задержки в Swift

У меня нет кода для сэмплирования или чего-то еще, потому что я не знаю, как это сделать, но может кто-нибудь сказать мне, как отложить функцию с помощью swift на определенное количество времени?

4 ответа

Решение

Вы можете использовать GCD (в примере с 10-секундной задержкой):

Свифт 2:

let triggerTime = (Int64(NSEC_PER_SEC) * 10)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), { () -> Void in
    self.functionToCall()
})

Свифт 3:

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
    self.functionToCall()
})

ВерсияSwift 3 с задержкой в ​​10 секунд

unowned let unownedSelf = self

let deadlineTime = DispatchTime.now() + .seconds(10)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
     unownedSelf.functionToCall()
})
 NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false)

Это вызвало бы функцию functionHere() с задержкой в ​​3 секунды.

Для добавления аргумента в функцию задержки.

Сначала настройте словарь, затем добавьте его как userInfo. Разверните информацию с таймером в качестве аргумента.

let arg : Int = 42
let infoDict : [String : AnyObject] = ["argumentInt", arg]

NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHereWithArgument:", userInfo: infoDict, repeats: false)

Тогда в вызываемой функции

func functionHereWithArgument (timer : NSTimer)
{
    if let userInfo = timer.userInfo as? Dictionary<String, AnyObject>
    {
         let argumentInt : Int = (userInfo[argumentInt] as! Int)
    }
}
Другие вопросы по тегам