将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