APSDataFormatter.swift 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import Foundation
  2. enum APSDataFormatter {
  3. private static let numberFormatter: NumberFormatter = {
  4. let f = NumberFormatter()
  5. f.numberStyle = .decimal
  6. return f
  7. }()
  8. private static func formatToPrecision(_ number: Double, precision: Int, minimumFraction: Int = 1) -> String {
  9. numberFormatter.minimumFractionDigits = minimumFraction
  10. numberFormatter.maximumFractionDigits = precision
  11. return numberFormatter.string(from: NSNumber(value: number))!
  12. }
  13. private static func formatTime(difference: Double) -> String {
  14. let rawHours = Int(round(difference / 3600))
  15. let days = rawHours / 24
  16. let hours = rawHours - (24 * days)
  17. return ("\(days)d\(hours)h")
  18. }
  19. static func format(inputValue: Double, to formatType: APSDataTypes) -> String {
  20. switch formatType {
  21. case .delta:
  22. let formattedDelta = formatToPrecision(inputValue, precision: 2)
  23. if inputValue >= 0 {
  24. return "+" + formattedDelta
  25. }
  26. return formattedDelta
  27. case .glucose:
  28. return formatToPrecision(inputValue, precision: 1)
  29. case .cob:
  30. return formatToPrecision(inputValue, precision: 1) + "g"
  31. case .iob:
  32. return formatToPrecision(inputValue, precision: 2) + "U"
  33. case .basal:
  34. return formatToPrecision(inputValue, precision: 2, minimumFraction: 2) + "U"
  35. case .time:
  36. return formatTime(difference: inputValue)
  37. }
  38. }
  39. }