| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- //
- // DisplayGlucosePreference.swift
- // LoopKitUI
- //
- // Created by Nathaniel Hamming on 2021-03-10.
- // Copyright © 2021 LoopKit Authors. All rights reserved.
- //
- import Foundation
- import HealthKit
- import SwiftUI
- import LoopKit
- public class DisplayGlucosePreference: ObservableObject {
- @Published public private(set) var unit: HKUnit
- @Published public private(set) var rateUnit: HKUnit
- @Published public private(set) var formatter: QuantityFormatter
- @Published public private(set) var minuteRateFormatter: QuantityFormatter
- public init(displayGlucoseUnit: HKUnit) {
- let rateUnit = displayGlucoseUnit.unitDivided(by: .minute())
- self.unit = displayGlucoseUnit
- self.rateUnit = rateUnit
- self.formatter = QuantityFormatter(for: displayGlucoseUnit)
- self.minuteRateFormatter = QuantityFormatter(for: rateUnit)
- self.formatter.numberFormatter.notANumberSymbol = "–"
- self.minuteRateFormatter.numberFormatter.notANumberSymbol = "–"
- }
- /// Formats a glucose HKQuantity and unit as a localized string
- ///
- /// - Parameters:
- /// - quantity: The quantity
- /// - includeUnit: Whether or not to include the unit in the returned string
- /// - Returns: A localized string, or the numberFormatter's notANumberSymbol (default is "–")
- open func format(_ quantity: HKQuantity, includeUnit: Bool = true) -> String {
- return formatter.string(from: quantity, includeUnit: includeUnit) ?? self.formatter.numberFormatter.notANumberSymbol
- }
- /// Formats a glucose HKQuantity rate (in terms of mg/dL/min or mmol/L/min and unit as a localized string
- ///
- /// - Parameters:
- /// - quantity: The quantity
- /// - includeUnit: Whether or not to include the unit in the returned string
- /// - Returns: A localized string, or the numberFormatter's notANumberSymbol (default is "–")
- open func formatMinuteRate(_ quantity: HKQuantity, includeUnit: Bool = true) -> String {
- return minuteRateFormatter.string(from: quantity, includeUnit: includeUnit) ?? self.formatter.numberFormatter.notANumberSymbol
- }
- }
- extension DisplayGlucosePreference: DisplayGlucoseUnitObserver {
- public func unitDidChange(to displayGlucoseUnit: HKUnit) {
- self.unit = displayGlucoseUnit
- self.formatter = QuantityFormatter(for: displayGlucoseUnit)
- }
- }
|