如何在 Swift 中的外部 class 中构建定时器?
How do I structure a Timer in an external class in Swift?
我正在尝试创建一个新的秒表计时器。
我有我的:
- 主计时器ViewController
- 一个定时器模型——我存储我的定时器的地方。
当我的模型中的计时器结束时,我如何才能让主要 ViewController 知道它已经完成?
理想情况下,当模型中的计时器完成时,我想 运行 主 UIViewController 的功能。
Class myTimer: NSObject {
func stopTimer() {
timer?.invalidate()
print("timer Stopped at \(currentTime)")
}
}
让你的 MyTimer class 做 NSTimer 已经做的事情。 MyTimer的"user"在创建/启动MyTimer时注册一个回调函数,MyTimer在触发时调用该函数。
我会通过post发送、注册和取消分配通知来做到这一点。
-注册通知,在 viewController 的 viewDidLoad 中执行此操作。
NSNotificationCenter.defaultCenter().addObserver(self, selector: "timerExpired", name: "TimerCompleteNotification", object: nil)
其中选择器是在 posted 计时器完成通知时调用的函数。
-post正在接收通知。在更新计时器标签的任何函数中添加它,并在计时器到期时调用它。
NSNotificationCenter.defaultCenter().postNotificationName("TimerCompleteNotification", object: nil)
只需确保 "TimerCompleteNotification" 在 posting 和 addObserver 中的拼写相同。你在这里做的是说,"I'd like to observe a notification that may happen, and when it does, I'll call this function," 然后当计时器结束时,你 post 该通知并执行指定的功能。
忘了告诉你把这个添加到你的视图控制器中,否则你会得到一个访问错误
deinit{
//Unregister for notificationsd
NSNotificationCenter.defaultCenter().removeObserver(self)
}
我正在尝试创建一个新的秒表计时器。
我有我的:
- 主计时器ViewController
- 一个定时器模型——我存储我的定时器的地方。
当我的模型中的计时器结束时,我如何才能让主要 ViewController 知道它已经完成? 理想情况下,当模型中的计时器完成时,我想 运行 主 UIViewController 的功能。
Class myTimer: NSObject {
func stopTimer() {
timer?.invalidate()
print("timer Stopped at \(currentTime)")
}
}
让你的 MyTimer class 做 NSTimer 已经做的事情。 MyTimer的"user"在创建/启动MyTimer时注册一个回调函数,MyTimer在触发时调用该函数。
我会通过post发送、注册和取消分配通知来做到这一点。
-注册通知,在 viewController 的 viewDidLoad 中执行此操作。
NSNotificationCenter.defaultCenter().addObserver(self, selector: "timerExpired", name: "TimerCompleteNotification", object: nil)
其中选择器是在 posted 计时器完成通知时调用的函数。
-post正在接收通知。在更新计时器标签的任何函数中添加它,并在计时器到期时调用它。
NSNotificationCenter.defaultCenter().postNotificationName("TimerCompleteNotification", object: nil)
只需确保 "TimerCompleteNotification" 在 posting 和 addObserver 中的拼写相同。你在这里做的是说,"I'd like to observe a notification that may happen, and when it does, I'll call this function," 然后当计时器结束时,你 post 该通知并执行指定的功能。
忘了告诉你把这个添加到你的视图控制器中,否则你会得到一个访问错误
deinit{
//Unregister for notificationsd
NSNotificationCenter.defaultCenter().removeObserver(self)
}