我试图将参数传递给我的代码中由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
}
注意:该方法与调用它的类相同。所以我相信我已经正确设定了目标。
答案 0 :(得分:35)
您与NSTimer
一起使用的选择器会传递NSTimer
对象,因为它是唯一的参数。将圆形对象放在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
}
答案 1 :(得分:0)
你的选择器必须是一个字符串,除非它应该是一个ivar。此外,您的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
}
该函数确实不需要返回空元组;它可以在没有-> ()
我还看到选择器字符串包含在“Selector()”方法中:Selector("animate")
。无论哪种方式都可以。
我自己一直在弄NSTimer
并关闭它并写了一篇文章:Using Swift's Closures With NSTimer