将参数传递给Swift中由NSTimer调用的方法

时间:2014-07-22 13:50:43

标签: ios xcode swift nstimer

我试图将参数传递给我的代码中由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
    }

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

2 个答案:

答案 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