为什么这个计时器没有开火?

时间:2014-09-07 00:36:37

标签: swift

在操场上试过,但是“计时器”从未打印过。为什么计时器没有开火?

class Tester {
    var myTimer:NSTimer?

    init() {
        print("initialized")
        myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timerFunc:", userInfo: nil, repeats: true)
    }

    func timerFunc(timer:NSTimer) {
        print("timer")
    }
}

var test = Tester()

然后我尝试使用Tester子类NSObject并得到相同的结果。 “初始化”打印,但不是“计时器”。也没有出错。

class Tester:NSObject {
    var myTimer:NSTimer?

    override init() {
        super.init()
        print("initialized")
        myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timerFunc:", userInfo: nil, repeats: true)
    }

    func timerFunc(timer:NSTimer) {
        print("timer")
    }
}


var test = Tester()

1 个答案:

答案 0 :(得分:1)

这很奇怪:为了能够设置NSTimer,似乎必须运行runloop才能调用它:

let mainLoop = NSRunLoop.mainRunLoop()
mainLoop.addTimer(test.myTimer!, forMode: NSDefaultRunLoopMode)

将计时器添加到runloop是允许它调用timerFunc的原因。但是,NSRunLoop不会在Playground中运行(主循环在运行当前代码后停止),所以你不能在那里使用NSTimer(你必须使用它)在一个项目内。)