Passing parameters to a method called by NSTimer in Swift

不羁的心 提交于 2019-11-27 02:14:08
Andy

The selector you use with NSTimer is passed the NSTimer object as it's one and only parameter. Put the circle object in it as userInfo and you can extract it when the timer fires.

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
}

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:

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
}

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 NSTimer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!