将parameter passing给Swift中由NSTimer调用的方法

我试图将一个parameter passing给由我的代码中的NSTimer调用的方法。 这是抛出一个例外。 这就是我正在做的。 Circle是我的自定义类。

var circle = Circle() var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: animate, userInfo: circle, repeats: true) 

以下是正在调用的方法

  func animate(circle: Circle) -> Void{ //do stuff with circle } 

注意:该方法与被调用的类在同一个类中。 所以我相信我已经正确设定了目标。

您使用NSTimer的select器将传递NSTimer对象,因为它是唯一的参数。 将circle对象放在userInfo ,当定时器触发时可以将其提取出来。

 var circle = Circle() var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: "animate:", userInfo: circle, repeats: true) func animate(timer:NSTimer){ var circle = timer.userInfo as Circle //do stuff with circle } 

你的select器需要是一个string,除非这个应该是一个伊娃。 另外,你的animate函数有错误的签名。 以下更改应该让你再次移动:

 var circle = Circle() var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: "animate", userInfo: circle, repeats: true) func animate(circle: Circle) -> () { //do stuff with circle } 

该函数实际上不需要返回空元组; 它可以被写入没有-> ()

我也看到select器string包裹在“Selector()”方法中: Selector("animate") 。 它以任何方式工作。

我一直在搞NSTimer ,closures自己,写了一篇文章: 使用Swift的闭包与NSTimer