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.

136 lines
3.2 KiB

5 years ago
5 years ago
5 years ago
5 years ago
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. import Foundation
  9. import UIKit
  10. protocol KeyProtocol: RawRepresentable, CaseIterable {}
  11. class UserDefaultsWrapper<Keys: KeyProtocol> where Keys.RawValue == String {
  12. func float(_ key: Keys) -> Float? {
  13. return UserDefaults.standard.float(forKey: key.rawValue)
  14. }
  15. func string(_ key: Keys) -> String? {
  16. return UserDefaults.standard.string(forKey: key.rawValue)
  17. }
  18. func bool(_ key: Keys) -> Bool {
  19. return UserDefaults.standard.bool(forKey: key.rawValue)
  20. }
  21. func double(_ key: Keys) -> Double? {
  22. return UserDefaults.standard.double(forKey: key.rawValue)
  23. }
  24. func integer(_ key: Keys) -> Int {
  25. return UserDefaults.standard.integer(forKey: key.rawValue)
  26. }
  27. func object(_ key: Keys) -> Any? {
  28. return UserDefaults.standard.object(forKey: key.rawValue)
  29. }
  30. }
  31. extension UserDefaultsWrapper {
  32. @discardableResult
  33. func set(_ url: URL?, _ key: Keys) -> Self {
  34. UserDefaults.standard.set(url, forKey: key.rawValue)
  35. return self
  36. }
  37. @discardableResult
  38. func set(_ value: Any?, _ key: Keys) -> Self {
  39. UserDefaults.standard.set(value, forKey: key.rawValue)
  40. return self
  41. }
  42. @discardableResult
  43. func set(_ value: Bool?, _ key: Keys) -> Self {
  44. UserDefaults.standard.set(value, forKey: key.rawValue)
  45. return self
  46. }
  47. @discardableResult
  48. func set(_ value: Double?, _ key: Keys) -> Self {
  49. UserDefaults.standard.set(value, forKey: key.rawValue)
  50. return self
  51. }
  52. @discardableResult
  53. func set(_ value: String?, _ key: Keys) -> Self {
  54. UserDefaults.standard.set(value, forKey: key.rawValue)
  55. return self
  56. }
  57. @discardableResult
  58. func set(_ value: Int?, _ key: Keys) -> Self {
  59. UserDefaults.standard.set(value, forKey: key.rawValue)
  60. return self
  61. }
  62. @discardableResult
  63. func set(_ value: Float?, _ key: Keys) -> Self {
  64. UserDefaults.standard.set(value, forKey: key.rawValue)
  65. return self
  66. }
  67. }
  68. extension UserDefaultsWrapper where Keys == GMEDB.UserKeys {
  69. @discardableResult
  70. func removeAllWithoutUserID() -> Self {
  71. Keys.allCases.forEach {
  72. if $0 != .userId {
  73. UserDefaults.standard.removeObject(forKey: $0.rawValue)
  74. }
  75. }
  76. return self
  77. }
  78. }
  79. extension UserDefaultsWrapper {
  80. @discardableResult
  81. func remove(_ key: Keys) -> Self {
  82. UserDefaults.standard.removeObject(forKey: key.rawValue)
  83. return self
  84. }
  85. @discardableResult
  86. func remove(_ keys: [Keys]) -> Self {
  87. keys.forEach {
  88. UserDefaults.standard.removeObject(forKey: $0.rawValue)
  89. }
  90. return self
  91. }
  92. @discardableResult
  93. func removeAll() -> Self {
  94. Keys.allCases.forEach {
  95. UserDefaults.standard.removeObject(forKey: $0.rawValue)
  96. }
  97. return self
  98. }
  99. }
  100. extension UserDefaultsWrapper {
  101. @discardableResult
  102. func debugPrint(_ key: Keys) -> UserDefaultsWrapper {
  103. print("\(key.rawValue): \(object(key) as Any)")
  104. return self
  105. }
  106. @discardableResult
  107. func debugPrintAllElement() -> Self {
  108. print("\(Keys.self)'s All Elements")
  109. Keys.allCases.forEach {
  110. print("\($0.rawValue): \(object($0) as Any)")
  111. }
  112. return self
  113. }
  114. }