You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.9 KiB

5 years ago
5 years ago
5 years ago
  1. //
  2. // InnerDatabase.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 17/07/2019.
  6. // Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. protocol KeyProtocol: RawRepresentable, CaseIterable {}
  9. class UserDefaultsWrapper<Keys: KeyProtocol> where Keys.RawValue == String {
  10. func float(_ key: Keys) -> Float? {
  11. return UserDefaults.standard.float(forKey: key.rawValue)
  12. }
  13. func string(_ key: Keys) -> String? {
  14. return UserDefaults.standard.string(forKey: key.rawValue)
  15. }
  16. func bool(_ key: Keys) -> Bool {
  17. return UserDefaults.standard.bool(forKey: key.rawValue)
  18. }
  19. func double(_ key: Keys) -> Double? {
  20. return UserDefaults.standard.double(forKey: key.rawValue)
  21. }
  22. func integer(_ key: Keys) -> Int {
  23. return UserDefaults.standard.integer(forKey: key.rawValue)
  24. }
  25. func object(_ key: Keys) -> Any? {
  26. return UserDefaults.standard.object(forKey: key.rawValue)
  27. }
  28. }
  29. extension UserDefaultsWrapper {
  30. @discardableResult
  31. func set(_ url: URL?, _ key: Keys) -> Self {
  32. UserDefaults.standard.set(url, forKey: key.rawValue)
  33. return self
  34. }
  35. @discardableResult
  36. func set(_ value: Any?, _ key: Keys) -> Self {
  37. UserDefaults.standard.set(value, forKey: key.rawValue)
  38. return self
  39. }
  40. @discardableResult
  41. func set(_ value: Bool?, _ key: Keys) -> Self {
  42. UserDefaults.standard.set(value, forKey: key.rawValue)
  43. return self
  44. }
  45. @discardableResult
  46. func set(_ value: Double?, _ key: Keys) -> Self {
  47. UserDefaults.standard.set(value, forKey: key.rawValue)
  48. return self
  49. }
  50. @discardableResult
  51. func set(_ value: String?, _ key: Keys) -> Self {
  52. UserDefaults.standard.set(value, forKey: key.rawValue)
  53. return self
  54. }
  55. @discardableResult
  56. func set(_ value: Int?, _ key: Keys) -> Self {
  57. UserDefaults.standard.set(value, forKey: key.rawValue)
  58. return self
  59. }
  60. @discardableResult
  61. func set(_ value: Float?, _ key: Keys) -> Self {
  62. UserDefaults.standard.set(value, forKey: key.rawValue)
  63. return self
  64. }
  65. }
  66. extension UserDefaultsWrapper {
  67. @discardableResult
  68. func remove(_ key: Keys) -> Self {
  69. UserDefaults.standard.removeObject(forKey: key.rawValue)
  70. return self
  71. }
  72. @discardableResult
  73. func remove(_ keys: [Keys]) -> Self {
  74. keys.forEach {
  75. UserDefaults.standard.removeObject(forKey: $0.rawValue)
  76. }
  77. return self
  78. }
  79. @discardableResult
  80. func removeAll() -> Self {
  81. Keys.allCases.forEach{
  82. UserDefaults.standard.removeObject(forKey: $0.rawValue)
  83. }
  84. return self
  85. }
  86. }
  87. extension UserDefaultsWrapper {
  88. @discardableResult
  89. func debugPrint(_ key: Keys) -> UserDefaultsWrapper {
  90. print("\(key.rawValue): \(object(key) as Any)")
  91. return self
  92. }
  93. @discardableResult
  94. func debugPrintAllElement() -> Self {
  95. print("\(Keys.self)'s All Elements")
  96. Keys.allCases.forEach{
  97. print("\($0.rawValue): \(object($0) as Any)")
  98. }
  99. return self
  100. }
  101. }