HKUnit.swift 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // HKUnit.swift
  3. // Naterade
  4. //
  5. // Created by Nathan Racklyeft on 1/17/16.
  6. // Copyright © 2016 Nathan Racklyeft. All rights reserved.
  7. //
  8. import HealthKit
  9. extension HKUnit {
  10. static let milligramsPerDeciliter: HKUnit = {
  11. return HKUnit.gramUnit(with: .milli).unitDivided(by: .literUnit(with: .deci))
  12. }()
  13. static let millimolesPerLiter: HKUnit = {
  14. return HKUnit.moleUnit(with: .milli, molarMass: HKUnitMolarMassBloodGlucose).unitDivided(by: .liter())
  15. }()
  16. static let milligramsPerDeciliterPerMinute: HKUnit = {
  17. return HKUnit.milligramsPerDeciliter.unitDivided(by: .minute())
  18. }()
  19. static let millimolesPerLiterPerMinute: HKUnit = {
  20. return HKUnit.millimolesPerLiter.unitDivided(by: .minute())
  21. }()
  22. static let internationalUnitsPerHour: HKUnit = {
  23. return HKUnit.internationalUnit().unitDivided(by: .hour())
  24. }()
  25. static let gramsPerUnit: HKUnit = {
  26. return HKUnit.gram().unitDivided(by: .internationalUnit())
  27. }()
  28. var foundationUnit: Unit? {
  29. if self == HKUnit.milligramsPerDeciliter {
  30. return UnitConcentrationMass.milligramsPerDeciliter
  31. }
  32. if self == HKUnit.millimolesPerLiter {
  33. return UnitConcentrationMass.millimolesPerLiter(withGramsPerMole: HKUnitMolarMassBloodGlucose)
  34. }
  35. if self == HKUnit.gram() {
  36. return UnitMass.grams
  37. }
  38. return nil
  39. }
  40. /// The smallest value expected to be visible on a chart
  41. var chartableIncrement: Double {
  42. if self == .milligramsPerDeciliter {
  43. return 1
  44. } else {
  45. return 1 / 25
  46. }
  47. }
  48. }