我想在某个点暂停我的应用程序。换句话说,我希望我的应用程序执行代码,但在某一点上,暂停4秒,然后继续执行其余的代码。我该怎么做呢?
我用的是Swift。
我想在某个点暂停我的应用程序。换句话说,我希望我的应用程序执行代码,但在某一点上,暂停4秒,然后继续执行其余的代码。我该怎么做呢?
我用的是Swift。
当前回答
如果需要将延迟设置为小于1秒,则不需要设置.seconds参数。我希望这对某些人有用。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
// your code hear
})
其他回答
在Swift 4.2和Xcode 10.1中
你总共有4种方法来延迟。在这些选项中,首选选项1是在一段时间后调用或执行函数。sleep()是使用最少的情况。
选项1。
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
self.yourFuncHere()
}
//Your function here
func yourFuncHere() {
}
第二个选项。
perform(#selector(yourFuncHere2), with: nil, afterDelay: 5.0)
//Your function here
@objc func yourFuncHere2() {
print("this is...")
}
选项3。
Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(yourFuncHere3), userInfo: nil, repeats: false)
//Your function here
@objc func yourFuncHere3() {
}
选项4。
sleep(5)
如果你想在一段时间后调用一个函数来执行一些东西,不要使用sleep。
DispatchQueue.global(qos: .background).async {
sleep(4)
print("Active after 4 sec, and doesn't block main")
DispatchQueue.main.async{
//do stuff in the main thread here
}
}
NSTimer
@nneonneo的回答建议使用NSTimer,但没有说明如何使用。这是基本语法:
let delay = 0.5 // time in seconds
NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: #selector(myFunctionName), userInfo: nil, repeats: false)
这里有一个非常简单的项目来展示如何使用它。当一个按钮被按下时,它会启动一个计时器,在延迟半秒后调用一个函数。
import UIKit
class ViewController: UIViewController {
var timer = NSTimer()
let delay = 0.5
// start timer when button is tapped
@IBAction func startTimerButtonTapped(sender: UIButton) {
// cancel the timer in case the button is tapped multiple times
timer.invalidate()
// start the timer
timer = NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: #selector(delayedAction), userInfo: nil, repeats: false)
}
// function to be called after the delay
func delayedAction() {
print("action has started")
}
}
使用dispatch_time(如Palle的回答)是另一个有效的选项。然而,这很难取消。使用NSTimer,在延迟事件发生之前取消它,你所需要做的就是调用
timer.invalidate()
不建议使用sleep,特别是在主线程上,因为它会停止线程上正在完成的所有工作。
在这里可以看到我更完整的答案。
你也可以用Swift 3这样做。
像这样执行延迟后的功能。
override func viewDidLoad() {
super.viewDidLoad()
self.perform(#selector(ClassName.performAction), with: nil, afterDelay: 2.0)
}
@objc func performAction() {
//This function will perform after 2 seconds
print("Delayed")
}
如果需要将延迟设置为小于1秒,则不需要设置.seconds参数。我希望这对某些人有用。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
// your code hear
})