Files
Schedule-ICTIS/Carthage/Checkouts/TrueTime.swift/Examples/iOS/ViewController.swift
Vladimir Dubovik 5abafda21b Commit
2025-06-13 11:59:16 +03:00

99 lines
2.6 KiB
Swift

//
// ViewController.swift
// TrueTime
//
// Created by Michael Sanders on 10/26/16.
// Copyright © 2016 Instacart. All rights reserved.
//
import UIKit
import TrueTime
final class ExampleViewController: UIViewController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
NotificationCenter.default.addObserver(
self,
selector: #selector(startTimer),
name: UIApplication.didBecomeActiveNotification,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(cancelTimer),
name: UIApplication.willResignActiveNotification,
object: nil
)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
label.frame = view.bounds.insetBy(dx: 15, dy: 15)
label.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(label)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
refresh()
startTimer()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
cancelTimer()
}
fileprivate var referenceTime: ReferenceTime?
fileprivate var timer: Timer?
fileprivate lazy var label: UILabel = {
let label = UILabel()
label.textColor = .black
label.textAlignment = .center
label.font = .systemFont(ofSize: 14)
label.numberOfLines = 0
return label
}()
}
private extension ExampleViewController {
@objc func startTimer() {
timer = .scheduledTimer(withTimeInterval: 0.5, repeats: true) { [weak self] _ in
self?.tick()
}
}
@objc func cancelTimer() {
timer?.invalidate()
timer = nil
}
func tick() {
if let referenceTime = referenceTime {
let trueTime = referenceTime.now()
label.text = "\(trueTime)\n\n\(referenceTime)"
}
}
func refresh() {
TrueTimeClient.sharedInstance.fetchIfNeeded { result in
switch result {
case let .success(referenceTime):
self.referenceTime = referenceTime
print("Got network time! \(referenceTime)")
case let .failure(error):
print("Error! \(error)")
}
}
}
}