在swift中延迟函数

时间:2015-03-03 00:03:21

标签: ios swift function delay

我没有代码可以采样或任何东西,因为我不知道该怎么做,但有人可以告诉我如何使用swift延迟一段时间的功能吗?

4 个答案:

答案 0 :(得分:307)

您可以使用GCD(在示例中延迟10秒):

Swift 2

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

Swift 3和Swift 4

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

答案 1 :(得分:28)

Swift 3 版本延迟10秒

unowned let unownedSelf = self

let deadlineTime = DispatchTime.now() + .seconds(10)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
     unownedSelf.functionToCall()
})

答案 2 :(得分:23)

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

这将调用函数functionHere(),延迟时间为3秒

答案 3 :(得分: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)
    }
}