在swift操场上使用NSTimer

在swift操场上使用NSTimer,swift,uikit,nstimer,foundation,swift-playground,Swift,Uikit,Nstimer,Foundation,Swift Playground,我想知道如何在Swift游乐场内使用NSTimer,但没有一个答案真正回答了这个问题 这是我的游乐场代码: import Foundation class MyClass { func startTimer() { NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true) } func on

我想知道如何在Swift游乐场内使用
NSTimer
,但没有一个答案真正回答了这个问题

这是我的游乐场代码:

import Foundation

class MyClass {

    func startTimer() {
        NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
    }

    func onTimer(timer:NSTimer!) {
        println("Timer here")
    }
}

var anInstance = MyClass()

anInstance.startTimer()
使用实例化
NSTimer
将创建计时器并在当前运行循环中调度它


但是永远不会调用方法
onTimer
。为什么?

首先,您的
onTimer
方法必须声明为
@objc
,否则
NSTimer
无法找到该方法

至于你的问题,那是因为你还没有开始跑步循环

为此,我认为,
CFRunLoopRun()
是最简单的解决方案

import Foundation

class MyClass {

    func startTimer() {
        NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
    }

    @objc func onTimer(timer:NSTimer!) {
        println("Timer here")
    }
}

var anInstance = MyClass()

anInstance.startTimer()

CFRunLoopRun() // <-- HERE!
在这种情况下,游乐场仅运行时间线中指定的秒数:


。。。或者XCPSetExecutionShouldContinueIndefinitely()@MartinR和
导入xcpete
:)这非常简单,
CFRunLoopRun()
行。考虑到
NSTimer
是如何实现的,这是有道理的。
import Foundation
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely()

class MyClass {

    func startTimer() {
        NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
    }

    @objc func onTimer(timer:NSTimer!) {
        println("Timer here")
    }
}

var anInstance = MyClass()

anInstance.startTimer()