I'm trying to pass an argument to a method that is called by NSTimer in my code. It is throwing an exception. This is how I'm doing it. Circle is my custom class.
var circle = Circle()
var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: animate, userInfo: circle, repeats: true)
Below is the method that is being called
func animate(circle: Circle) -> Void{
//do stuff with circle
}
Note: The method is in the same class that it is being called. So I believe i've set the target correctly.
Your selector needs to be a string unless that's supposed to be an ivar. Also, your
animate
function has the wrong signature. The following changes should get you moving again:The function really doesn't need to return the empty tuple; it can be written without the
-> ()
I've also seen the selector string wrapped in a "Selector()" method:
Selector("animate")
. It works either way.I've been messing with
NSTimer
and closures myself and wrote an article on it: Using Swift's Closures With NSTimerThe selector you use with
NSTimer
is passed theNSTimer
object as it's one and only parameter. Put the circle object in it asuserInfo
and you can extract it when the timer fires.