在 Swift Playground 中使用 NSTimer [重复]
Posted
技术标签:
【中文标题】在 Swift Playground 中使用 NSTimer [重复]【英文标题】:Using NSTimer in swift playground [duplicate] 【发布时间】:2015-03-24 12:10:52 【问题描述】:我想知道如何在 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
永远不会被调用。为什么?
【问题讨论】:
【参考方案1】:首先,您的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 只运行时间轴中指定的秒数:
【讨论】:
... 或 XCPSetExecutionShouldContinueIndefinitely() @MartinR 和import XCPlayground
:)
这非常简单,CFRunLoopRun()
行。考虑到NSTimer
的实现方式,这是有道理的。以上是关于在 Swift Playground 中使用 NSTimer [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 在 Playground 中获取用户交互事件