在 swift 操场上使用 NSTimer
Using NSTimer in swift playground
我想知道如何在 Swift 游乐场中使用 NSTimer
。 This question has been asked before,但 none 的答案实际上回答了问题。
这是我的游乐场代码:
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
。为什么?
首先,您的 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 运行仅在时间轴中指定秒数:
我想知道如何在 Swift 游乐场中使用 NSTimer
。 This question has been asked before,但 none 的答案实际上回答了问题。
这是我的游乐场代码:
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
。为什么?
首先,您的 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 运行仅在时间轴中指定秒数: