iosnstimernstimeintervalswift

How can I use Timer (formerly NSTimer) in Swift?


I tried

var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)

But, I got an error saying

'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'

Solution

  • This will work:

    override func viewDidLoad() {
        super.viewDidLoad()
        // Swift block syntax (iOS 10+)
        let timer = Timer(timeInterval: 0.4, repeats: true) { _ in print("Done!") }
        // Swift >=3 selector syntax
        let timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
        // Swift 2.2 selector syntax
        let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true)
        // Swift <2.2 selector syntax
        let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
    }
    
    // must be internal or public. 
    @objc func update() {
        // Something cool
    }
    

    For Swift 4, the method of which you want to get the selector must be exposed to Objective-C, thus @objc attribute must be added to the method declaration.