在操场上试过,但是“计时器”从未打印过。为什么计时器没有开火?
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()
答案 0 :(得分:1)
这很奇怪:为了能够设置NSTimer
,似乎必须运行runloop才能调用它:
let mainLoop = NSRunLoop.mainRunLoop()
mainLoop.addTimer(test.myTimer!, forMode: NSDefaultRunLoopMode)
将计时器添加到runloop是允许它调用timerFunc
的原因。但是,NSRunLoop
不会在Playground中运行(主循环在运行当前代码后停止),所以你不能在那里使用NSTimer
(你必须使用它)在一个项目内。)