我想知道如何在Swift Playground中使用NSTimer
。 This question has been asked before,但没有一个答案真正回答了这个问题。
这是我的游乐场代码:
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()
使用scheduledTimerWithTimeInterval
实例化NSTimer
会创建计时器,会在当前运行循环中对其进行计划。
但是永远不会调用方法onTimer
。为什么?
答案 0 :(得分:12)
首先,您的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!
为了完整起见,正如@MartinR在评论中提到的那样,你也可以使用XCPSetExecutionShouldContinueIndefinitely()
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()
在这种情况下,Playground仅运行时间轴中指定的秒数: