Swift version: 5.10
You can use perform(_:with:afterDelay:)
to run a method after a certain number of seconds have passed, but if you want to run code at a specific time – say at exactly 4pm – then you should use Timer
instead. This class is great for executing code repeatedly at a specific time interval, but it's also great for running code at an exact time that you specify.
This is accomplished using a Timer
constructor that accepts an Date
for when the timer should fire. You can make this date however you want, which is what makes this approach so flexible.
As a simple example, this will create a timer that calls a runCode()
method in five seconds:
let date = Date.now.addingTimeInterval(5)
let timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(runCode), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: .common)
Notice how you can specify a interval
parameter? That's for when you set repeats
to be true
. If you have a Date
5 seconds from now and an interval
of 1 (after setting repeat
to be true!), it means "call runCode()
after five seconds, then every one second after that."
SPONSORED Superwall lets you build & test paywalls without shipping updates. Run experiments, offer sales, segment users, update locked features and more at the click of button. Best part? It's FREE for up to 250 conversions / mo and the Superwall team builds out 100% custom paywalls – free of charge.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 2.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.