NSUserDefaults.swift 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. //
  2. // NSUserDefaults.swift
  3. // LoopKit
  4. //
  5. // Created by Nathan Racklyeft on 3/18/16.
  6. // Copyright © 2016 Nathan Racklyeft. All rights reserved.
  7. //
  8. import Foundation
  9. import LoopKit
  10. extension UserDefaults {
  11. private enum Key: String {
  12. case BasalRateSchedule = "com.LoopKitExample.BasalRateSchedule"
  13. case CarbRatioSchedule = "com.LoopKitExample.CarbRatioSchedule"
  14. case InsulinActionDuration = "com.LoopKitExample.InsulinActionDuration"
  15. case InsulinSensitivitySchedule = "com.LoopKitExample.InsulinSensitivitySchedule"
  16. case GlucoseTargetRangeSchedule = "com.LoopKitExample.GlucoseTargetRangeSchedule"
  17. case PreMealTargetRange = "com.LoopKitExample.PreMealTargetRange"
  18. case LegacyWorkoutTargetRange = "com.LoopKitExample.LegacyWorkoutTargetRange"
  19. case MaximumBasalRatePerHour = "com.LoopKitExample.MaximumBasalRatePerHour"
  20. case MaximumBolus = "com.LoopKitExample.MaximumBolus"
  21. case PumpID = "com.LoopKitExample.PumpID"
  22. case PumpTimeZone = "com.LoopKitExample.PumpTimeZone"
  23. case TransmitterID = "com.LoopKitExample.TransmitterID"
  24. case TransmitterStartTime = "com.LoopKitExample.TransmitterStartTime"
  25. }
  26. var basalRateSchedule: BasalRateSchedule? {
  27. get {
  28. if let rawValue = dictionary(forKey: Key.BasalRateSchedule.rawValue) {
  29. return BasalRateSchedule(rawValue: rawValue)
  30. } else {
  31. return nil
  32. }
  33. }
  34. set {
  35. set(newValue?.rawValue, forKey: Key.BasalRateSchedule.rawValue)
  36. }
  37. }
  38. var carbRatioSchedule: CarbRatioSchedule? {
  39. get {
  40. if let rawValue = dictionary(forKey: Key.CarbRatioSchedule.rawValue) {
  41. return CarbRatioSchedule(rawValue: rawValue)
  42. } else {
  43. return nil
  44. }
  45. }
  46. set {
  47. set(newValue?.rawValue, forKey: Key.CarbRatioSchedule.rawValue)
  48. }
  49. }
  50. var insulinActionDuration: TimeInterval? {
  51. get {
  52. let value = double(forKey: Key.InsulinActionDuration.rawValue)
  53. return value > 0 ? value : TimeInterval(hours: 4)
  54. }
  55. set {
  56. if let insulinActionDuration = newValue {
  57. set(insulinActionDuration, forKey: Key.InsulinActionDuration.rawValue)
  58. } else {
  59. removeObject(forKey: Key.InsulinActionDuration.rawValue)
  60. }
  61. }
  62. }
  63. var insulinSensitivitySchedule: InsulinSensitivitySchedule? {
  64. get {
  65. if let rawValue = dictionary(forKey: Key.InsulinSensitivitySchedule.rawValue) {
  66. return InsulinSensitivitySchedule(rawValue: rawValue)
  67. } else {
  68. return nil
  69. }
  70. }
  71. set {
  72. set(newValue?.rawValue, forKey: Key.InsulinSensitivitySchedule.rawValue)
  73. }
  74. }
  75. var glucoseTargetRangeSchedule: GlucoseRangeSchedule? {
  76. get {
  77. if let rawValue = dictionary(forKey: Key.GlucoseTargetRangeSchedule.rawValue) {
  78. return GlucoseRangeSchedule(rawValue: rawValue)
  79. } else {
  80. return nil
  81. }
  82. }
  83. set {
  84. set(newValue?.rawValue, forKey: Key.GlucoseTargetRangeSchedule.rawValue)
  85. }
  86. }
  87. var preMealTargetRange: DoubleRange? {
  88. get {
  89. if let rawValue = array(forKey: Key.PreMealTargetRange.rawValue) as? DoubleRange.RawValue {
  90. return DoubleRange(rawValue: rawValue)
  91. } else {
  92. return nil
  93. }
  94. }
  95. set {
  96. set(newValue?.rawValue, forKey: Key.PreMealTargetRange.rawValue)
  97. }
  98. }
  99. var legacyWorkoutTargetRange: DoubleRange? {
  100. get {
  101. if let rawValue = array(forKey: Key.LegacyWorkoutTargetRange.rawValue) as? DoubleRange.RawValue {
  102. return DoubleRange(rawValue: rawValue)
  103. } else {
  104. return nil
  105. }
  106. }
  107. set {
  108. set(newValue?.rawValue, forKey: Key.LegacyWorkoutTargetRange.rawValue)
  109. }
  110. }
  111. var maximumBasalRatePerHour: Double? {
  112. get {
  113. let value = double(forKey: Key.MaximumBasalRatePerHour.rawValue)
  114. return value > 0 ? value : nil
  115. }
  116. set {
  117. if let maximumBasalRatePerHour = newValue {
  118. set(maximumBasalRatePerHour, forKey: Key.MaximumBasalRatePerHour.rawValue)
  119. } else {
  120. removeObject(forKey: Key.MaximumBasalRatePerHour.rawValue)
  121. }
  122. }
  123. }
  124. var maximumBolus: Double? {
  125. get {
  126. let value = double(forKey: Key.MaximumBolus.rawValue)
  127. return value > 0 ? value : nil
  128. }
  129. set {
  130. if let maximumBolus = newValue {
  131. set(maximumBolus, forKey: Key.MaximumBolus.rawValue)
  132. } else {
  133. removeObject(forKey: Key.MaximumBolus.rawValue)
  134. }
  135. }
  136. }
  137. var pumpID: String? {
  138. get {
  139. return string(forKey: Key.PumpID.rawValue) ?? "123456"
  140. }
  141. set {
  142. set(newValue, forKey: Key.PumpID.rawValue)
  143. }
  144. }
  145. var pumpTimeZone: TimeZone? {
  146. get {
  147. if let offset = object(forKey: Key.PumpTimeZone.rawValue) as? NSNumber {
  148. return TimeZone(secondsFromGMT: offset.intValue)
  149. } else {
  150. return nil
  151. }
  152. } set {
  153. if let value = newValue {
  154. set(NSNumber(value: value.secondsFromGMT()), forKey: Key.PumpTimeZone.rawValue)
  155. } else {
  156. removeObject(forKey: Key.PumpTimeZone.rawValue)
  157. }
  158. }
  159. }
  160. var transmitterStartTime: TimeInterval? {
  161. get {
  162. let value = double(forKey: Key.TransmitterStartTime.rawValue)
  163. return value > 0 ? value : nil
  164. }
  165. set {
  166. if let value = newValue {
  167. set(value, forKey: Key.TransmitterStartTime.rawValue)
  168. } else {
  169. removeObject(forKey: Key.TransmitterStartTime.rawValue)
  170. }
  171. }
  172. }
  173. var transmitterID: String? {
  174. get {
  175. return string(forKey: Key.TransmitterID.rawValue)
  176. }
  177. set {
  178. set(newValue, forKey: Key.TransmitterID.rawValue)
  179. }
  180. }
  181. }