TimeView.swift 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //
  2. // TimeView.swift
  3. // MockKitUI
  4. //
  5. // Created by Nathaniel Hamming on 2023-06-01.
  6. // Copyright © 2023 LoopKit Authors. All rights reserved.
  7. //
  8. import SwiftUI
  9. import LoopKitUI
  10. struct TimeView: View {
  11. @State private var currentDate = Date()
  12. let timeOffset: TimeInterval
  13. let timeZone: TimeZone
  14. let label: String
  15. private let shortTimeFormatter: DateFormatter = {
  16. let formatter = DateFormatter()
  17. formatter.dateStyle = .none
  18. formatter.timeStyle = .short
  19. return formatter
  20. }()
  21. private var timeToDisplay: Date {
  22. currentDate.addingTimeInterval(timeOffset)
  23. }
  24. private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
  25. private var timeZoneString: String {
  26. shortTimeFormatter.timeZone = timeZone
  27. return shortTimeFormatter.string(from: timeToDisplay)
  28. }
  29. init(timeOffset: TimeInterval = 0, timeZone: TimeZone = .current, label: String = "") {
  30. self.timeOffset = timeOffset
  31. self.timeZone = timeZone
  32. self.label = label
  33. }
  34. var body: some View {
  35. LabeledValueView(label: label, value: timeZoneString).onReceive(timer) { input in
  36. currentDate = input
  37. }
  38. }
  39. }
  40. struct TimeView_Previews: PreviewProvider {
  41. static var previews: some View {
  42. TimeView(timeOffset: 0, timeZone: .current, label: "Current Time")
  43. }
  44. }