您好,登錄后才能下訂單哦!
最近在做一個電商項目,因為有很多界面有打折商品,打折商品會時間限制,所以里面用到了大量的定時器來算倒計時。每一個頁面就是一個定時器。覺得太耗性能,想到了一個比較節(jié)約性能的方式。全局就一個定時器,控制全部的界面的倒計時。
項目用的是swift3.0
1、解決思路:
創(chuàng)建一個定時器的類,這個系統也就這一個定時器,定時器里面有一個代理方法,然后定時器執(zhí)行的方法就是執(zhí)行者個代理,那個需要用到定時器的界面,就去繼承這個代理,然后實現代理的方法就行。
2、代碼:
定時器類
import UIKit
protocol SSTTimerDelegate: class {
func updateTime()
}
final class SSTTimer: NSObject {
weak var delegate:SSTTimerDelegate?
static var shared: SSTTimer {
struct Static {
static let instance: SSTTimer = SSTTimer()
}
return Static.instance
}
private override init() {
super.init()
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(didTimerAlarm), userInfo: nil, repeats:true)
}
func didTimerAlarm() {
self.delegate?.updateTime()
}
}
其他要用到定時器的類:
1、
class ViewController: UIViewController {
var i = 0
@IBOutlet weak var timeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
TimerUtil.shared.delegate = self
}
}
extension ViewController: TimerDelegate {
func updateTime() {
i = i + 1;
timeLabel.text = "\(i)"
}
}
2、
class ViewThreeVC: UIViewController {
var i = 0
@IBOutlet weak var timeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
TimerUtil.shared.delegate = self
}
}
extension ViewThreeVC: TimerDelegate {
func updateTime() {
i = i + 1;
timeLabel.text = "\(i)"
}
}
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。