gpt4 book ai didi

swift - 为什么这个计时器不触发?

转载 作者:搜寻专家 更新时间:2023-10-31 23:05:17 24 4
gpt4 key购买 nike

在 playground 中试过这个,但是从来没有打印过“timer”。为什么定时器不触发?

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()

最佳答案

这很奇怪:看来,为了能够设置一个 NSTimer,runloop 必须正在运行,这样你才能调用它:

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

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

关于swift - 为什么这个计时器不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com