Commit
This commit is contained in:
98
Carthage/Checkouts/TrueTime.swift/Examples/iOS/ViewController.swift
vendored
Normal file
98
Carthage/Checkouts/TrueTime.swift/Examples/iOS/ViewController.swift
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
//
|
||||
// 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)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user