简单的NSTimer实现问题

时间:2016-02-11 02:54:38

标签: ios swift nstimer

我刚刚开始学习swift 2,我正在Xcode'playground'中测试一些东西。当创建'pyx'的实例(下面)时,我没有看到我期望的控制台输出。我确信我犯了一个愚蠢的错误,但在盯着它看了一段时间之后,我无法弄明白。

class zxy {

    var gameTimer = NSTimer()
    var counter = 0


    init() {
            gameTimer = NSTimer (timeInterval: 1, target: self, selector: "Run:", userInfo: nil, repeats: true)
    }


    func Run(timer : NSTimer) {

        while(counter < 10){
            print(counter)
            counter++
        }

        timer.invalidate()
    }

}

先谢谢。

2 个答案:

答案 0 :(得分:4)

您的代码有2个问题。正如@glenstorey在他的回答中指出的那样,你需要调用方法scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:,而不是你正在调用的init方法。

编辑:

正如@DanBeauleu在对我的回答的评论中所说的那样,电话会在Swift中看起来像这样:

NSTimer.scheduledTimerWithTimeInterval(
  1, 
  target: self, 
  selector: "Run:", 
  userInfo: nil, 
  repeats: true) 

第二个问题是你的Run方法。

你不想要一个while循环。这将在计时器第一次触发时在很短的时间内重复10次,然后使计时器无效。

您的计时器方法需要像这样更改:

func Run(timer : NSTimer) 
{

  if counter < 10
  {
    print(counter)
    counter++
  }
  else
  {
    timer.invalidate()
  }
}

(顺便说一句,通过强约定,方法/函数名称应以小写字母开头,因此您的Run函数应该命名为run。)

答案 1 :(得分:3)

你已经创建了一个NSTimer对象,但这并没有启动计时器 - 只是准备就绪了。使用scheduledTimerWithTimeInterval创建并启动计时器。