我有一个Swift类,我希望看起来像这样:
class UpdateManager {
let timer: NSTimer
init() {
timer = NSTimer(timeInterval: 600, target: self, selector: "check", userInfo: nil, repeats: true)
}
func check() {
// Do some stuff
}
}
但是,Swift不喜欢我将self
传递给NSTimer
初始值设定项的事实。我在这里打破了一些模式吗?一个人应该如何完成这样的初始化?
答案 0 :(得分:17)
您已找到Implicitly Unwrapped Optional的主要用例。
self
初始化之前,您需要从init
访问timer
。timer
永远不会为零,因此您不必在init
之外进行检查。因此,您应该声明let timer: NSTimer!
。
答案 1 :(得分:0)
除了隐式展开的可选项之外,我发现要使代码正常工作,我需要继承NSObject,并将计时器添加到当前运行循环中。
class UpdateManager:NSObject {
let timer: NSTimer!
override init() {
super.init()
timer = NSTimer(timeInterval: 600, target: self, selector: "check", userInfo: nil, repeats: true)
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
}
func check() {
// Do some stuff
}
}
根据评论更新代码 - 感谢jtbandes和Caroline
class UpdateManager {
let timer: NSTimer!
init() {
timer = NSTimer.scheduledTimerWithTimeInterval(600,
target: self,
selector: "check",
userInfo: nil,
repeats: true)
}
@objc func check() {
// Do some stuff
}
}