swift 中的延迟函数
Delaying function in swift
我没有要采样的代码或其他任何东西,因为我不知道该怎么做,但是有人可以告诉我如何使用 swift 将函数延迟一段时间?
您可以使用 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()
})
Swift 5 或更高版本
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
//call any function
}
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false)
这会延迟 3 秒调用函数 functionHere()
用于向延迟函数添加参数。
首先设置一个字典,然后将其添加为用户信息。以计时器作为参数解包信息。
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)
}
}
Swift3及以上版本延迟10秒的版本
DispatchQueue.main.asyncAfter(deadline: .now() + 10) { [unowned self] in
self.functionToCall()
}
我没有要采样的代码或其他任何东西,因为我不知道该怎么做,但是有人可以告诉我如何使用 swift 将函数延迟一段时间?
您可以使用 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()
})
Swift 5 或更高版本
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
//call any function
}
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false)
这会延迟 3 秒调用函数 functionHere()
用于向延迟函数添加参数。
首先设置一个字典,然后将其添加为用户信息。以计时器作为参数解包信息。
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)
}
}
Swift3及以上版本延迟10秒的版本
DispatchQueue.main.asyncAfter(deadline: .now() + 10) { [unowned self] in
self.functionToCall()
}