我拼凑了一个 Timer 类来将 NSTimer 与我的所有 ViewController 一起使用,代码如下
import Foundation
class Timer {
var timer = NSTimer()
var handler: (Int) -> ()
let duration: Int
var elapsedTime: Int = 0
init(duration: Int, handler: (Int) -> ()) {
self.duration = duration
self.handler = handler
}
func start() {
self.timer = NSTimer.scheduledTimerWithTimeInterval(30,
target: self,
selector: Selector("chkProgress"),
userInfo: nil,
repeats: true)
}
func stop() {
timer.invalidate()
}
@objc func chkProgress() {
self.elapsedTime++
self.handler(elapsedTime)
if self.elapsedTime == self.duration {
self.stop()
}
}
deinit {
self.timer.invalidate()
}
}
然后在每个 ViewController 中我可以检查时间进度,然后相应地显示一条消息。问题是当我尝试调用它时
我已经尝试过
var timer = Timer()
var timer = Timer(30)
var timer = Timer(30,30)
生成的消息始终相同,告诉我无法使用类型 (int,int) 调用 Timer,这就是 init 中的uration() 的设置方式
我做错了什么?
最佳答案
参数不采用int、int。他们接受一个 int 和一个闭包。
您还需要修复您的计时器代码;
class Timer {
var timer = NSTimer()
var handler: (x:Int) -> ()
let duration: Int
var elapsedTime: Int = 0
init(duration: Int, handler: (Int) -> ()) {
self.duration = duration
self.handler = handler
}
func start() {
self.timer = NSTimer.scheduledTimerWithTimeInterval(30,
target: self,
selector: Selector("chkProgress"),
userInfo: nil,
repeats: true)
}
func stop() {
timer.invalidate()
}
@objc func chkProgress() {
self.elapsedTime++
self.handler(x: elapsedTime)
if self.elapsedTime == self.duration {
self.stop()
}
}
deinit {
self.timer.invalidate()
}
}
//定时器的实现
var t = Timer(duration: 30, handler:{ (x:Int) -> Void in
//Do soemthing with x;
});
关于xcode - 调用自定义计时器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650157/