KMProfileInfo.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. //
  2. // KMProfileInfo.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2023/11/9.
  6. //
  7. import Cocoa
  8. private var _shared: KMProfileInfo?
  9. @objcMembers class KMProfileInfo: NSObject, NSCoding {
  10. private static let KMProfileUnarchiveKey = "KMProfileUnarchiveKeyTemp1"
  11. private let KMProfileSaveInfoFullNameKey = "KMProfileSaveInfoFullNameKey"
  12. private let KMProfileSaveInfoFirstNameKey = "KMProfileSaveInfoFirstNameKey"
  13. private let KMProfileSaveInfoMiddleNameKey = "KMProfileSaveInfoMiddleNameKey"
  14. private let KMProfileSaveInfoLastNameKey = "KMProfileSaveInfoLastNameKey"
  15. private let KMProfileSaveInfoStreet1Key = "KMProfileSaveInfoStreet1Key"
  16. private let KMProfileSaveInfoStreet2Key = "KMProfileSaveInfoStreet2Key"
  17. private let KMProfileSaveInfoCityKey = "KMProfileSaveInfoCityKey"
  18. private let KMProfileSaveInfoStateKey = "KMProfileSaveInfoStateKey"
  19. private let KMProfileSaveInfoZipKey = "KMProfileSaveInfoZipKey"
  20. private let KMProfileSaveInfoCountryKey = "KMProfileSaveInfoCountryKey"
  21. private let KMProfileSaveInfoEmailKey = "KMProfileSaveInfoEmailKey"
  22. private let KMProfileSaveInfoTelKey = "KMProfileSaveInfoTelKey"
  23. private let KMProfileSaveInfoBirthDateKey = "KMProfileSaveInfoBirthDateKey"
  24. private let KMProfileSaveInfoCustomInfoKey = "KMProfileSaveInfoCustomInfoKey"
  25. private var _fullName: String = ""
  26. var fullName: String {
  27. get {
  28. return self._fullName
  29. }
  30. set {
  31. if (self._fullName != newValue) {
  32. self._fullName = newValue
  33. self._saveInfo()
  34. }
  35. }
  36. }
  37. private var _firstName: String = ""
  38. var firstName: String {
  39. get {
  40. return self._firstName
  41. }
  42. set {
  43. if (self._firstName != newValue) {
  44. self._firstName = newValue
  45. self._saveInfo()
  46. }
  47. }
  48. }
  49. private var _middleName: String = ""
  50. var middleName: String {
  51. get {
  52. return self._middleName
  53. }
  54. set {
  55. if (self._middleName != newValue) {
  56. self._middleName = newValue
  57. self._saveInfo()
  58. }
  59. }
  60. }
  61. private var _lastName: String = ""
  62. var lastName: String {
  63. get {
  64. return self._lastName
  65. }
  66. set {
  67. if (self._lastName != newValue) {
  68. self._lastName = newValue
  69. self._saveInfo()
  70. }
  71. }
  72. }
  73. private var _street1: String = ""
  74. var street1: String {
  75. get {
  76. return self._street1
  77. }
  78. set {
  79. if (self._street1 != newValue) {
  80. self._street1 = newValue
  81. self._saveInfo()
  82. }
  83. }
  84. }
  85. private var _street2: String = ""
  86. var street2: String {
  87. get {
  88. return self._street2
  89. }
  90. set {
  91. if (self._street2 != newValue) {
  92. self._street2 = newValue
  93. self._saveInfo()
  94. }
  95. }
  96. }
  97. private var _city: String = ""
  98. var city: String {
  99. get {
  100. return self._city
  101. }
  102. set {
  103. if (self._city != newValue) {
  104. self._city = newValue
  105. self._saveInfo()
  106. }
  107. }
  108. }
  109. private var _state: String = ""
  110. var state: String {
  111. get {
  112. return self._state
  113. }
  114. set {
  115. if (self._state != newValue) {
  116. self._state = newValue
  117. self._saveInfo()
  118. }
  119. }
  120. }
  121. private var _zip: String = ""
  122. var zip: String {
  123. get {
  124. return self._zip
  125. }
  126. set {
  127. if (self._zip != newValue) {
  128. self._zip = newValue
  129. self._saveInfo()
  130. }
  131. }
  132. }
  133. private var _country: String = ""
  134. var country: String {
  135. get {
  136. return self._country
  137. }
  138. set {
  139. if (self._country != newValue) {
  140. self._country = newValue
  141. self._saveInfo()
  142. }
  143. }
  144. }
  145. private var _email: String = ""
  146. var email: String {
  147. get {
  148. return self._email
  149. }
  150. set {
  151. if (self._email != newValue) {
  152. self._email = newValue
  153. self._saveInfo()
  154. }
  155. }
  156. }
  157. private var _tel: String = ""
  158. var tel: String {
  159. get {
  160. return self._tel
  161. }
  162. set {
  163. if (self._tel != newValue) {
  164. self._tel = newValue
  165. self._saveInfo()
  166. }
  167. }
  168. }
  169. private var _birthDate: String = ""
  170. var birthDate: String {
  171. get {
  172. return self._birthDate
  173. }
  174. set {
  175. if (self._birthDate != newValue) {
  176. self._birthDate = newValue
  177. self._saveInfo()
  178. }
  179. }
  180. }
  181. private var _customInfoArray: [Any] = []
  182. var customInfoArray: [Any] {
  183. get {
  184. return self._customInfoArray
  185. }
  186. set {
  187. if NSMutableArray(array: self.customInfoArray).isEqual(newValue) == false {
  188. self._customInfoArray = newValue
  189. self._saveInfo()
  190. }
  191. }
  192. }
  193. @objc (sharedInstance)
  194. static func shared() -> KMProfileInfo {
  195. if let instanch = _shared {
  196. return instanch
  197. }
  198. let defaults = UserDefaults.standard
  199. if let encodedObject = defaults.object(forKey: KMProfileUnarchiveKey) as? Data {
  200. NSKeyedUnarchiver.setClass(Self.self, forClassName: "KMProfileInfo")
  201. let instance = NSKeyedUnarchiver.unarchiveObject(with: encodedObject)
  202. _shared = (instance as! KMProfileInfo)
  203. } else {
  204. let instance = KMProfileInfo()
  205. instance._setBaseInfo()
  206. instance._saveInfo()
  207. _shared = instance
  208. }
  209. return _shared!
  210. }
  211. override init() {
  212. super.init()
  213. }
  214. required init?(coder: NSCoder) {
  215. super.init()
  216. self._fullName = coder.decodeObject(forKey: KMProfileSaveInfoFullNameKey) as? String ?? ""
  217. self._firstName = coder.decodeObject(forKey: KMProfileSaveInfoFirstNameKey) as? String ?? ""
  218. self._middleName = coder.decodeObject(forKey: KMProfileSaveInfoMiddleNameKey) as? String ?? ""
  219. self._lastName = coder.decodeObject(forKey: KMProfileSaveInfoLastNameKey) as? String ?? ""
  220. self._street1 = coder.decodeObject(forKey: KMProfileSaveInfoStreet1Key) as? String ?? ""
  221. self._street2 = coder.decodeObject(forKey: KMProfileSaveInfoStreet2Key) as? String ?? ""
  222. self._city = coder.decodeObject(forKey: KMProfileSaveInfoCityKey) as? String ?? ""
  223. self._state = coder.decodeObject(forKey: KMProfileSaveInfoStateKey) as? String ?? ""
  224. self._zip = coder.decodeObject(forKey: KMProfileSaveInfoZipKey) as? String ?? ""
  225. self._country = coder.decodeObject(forKey: KMProfileSaveInfoCountryKey) as? String ?? ""
  226. self._email = coder.decodeObject(forKey: KMProfileSaveInfoEmailKey) as? String ?? ""
  227. self._tel = coder.decodeObject(forKey: KMProfileSaveInfoTelKey) as? String ?? ""
  228. self._birthDate = coder.decodeObject(forKey: KMProfileSaveInfoBirthDateKey) as? String ?? ""
  229. self._customInfoArray = coder.decodeObject(forKey: KMProfileSaveInfoCustomInfoKey) as? [String] ?? []
  230. }
  231. func encode(with coder: NSCoder) {
  232. coder.encode(self.fullName, forKey: KMProfileSaveInfoFullNameKey)
  233. coder.encode(self.firstName, forKey: KMProfileSaveInfoFirstNameKey)
  234. coder.encode(self.middleName, forKey: KMProfileSaveInfoMiddleNameKey)
  235. coder.encode(self.lastName, forKey: KMProfileSaveInfoLastNameKey)
  236. coder.encode(self.street1, forKey: KMProfileSaveInfoStreet1Key)
  237. coder.encode(self.street2, forKey: KMProfileSaveInfoStreet2Key)
  238. coder.encode(self.city, forKey: KMProfileSaveInfoCityKey)
  239. coder.encode(self.state, forKey: KMProfileSaveInfoStateKey)
  240. coder.encode(self.zip, forKey: KMProfileSaveInfoZipKey)
  241. coder.encode(self.country, forKey: KMProfileSaveInfoCountryKey)
  242. coder.encode(self.email, forKey: KMProfileSaveInfoEmailKey)
  243. coder.encode(self.tel, forKey: KMProfileSaveInfoTelKey)
  244. coder.encode(self.birthDate, forKey: KMProfileSaveInfoBirthDateKey)
  245. coder.encode(self.customInfoArray, forKey: KMProfileSaveInfoCustomInfoKey)
  246. }
  247. func replaceObjectInCustomInfoArray(at index: Int, with object: Any) {
  248. self._customInfoArray[index] = object
  249. self._saveInfo()
  250. }
  251. func insertObject(_ object: Any, inCustomInfoArrayAt index: Int) {
  252. self._customInfoArray.insert(object, at: index)
  253. self._saveInfo()
  254. }
  255. func removeObjectFromCustomInfoArray(at index: Int) {
  256. self.customInfoArray.remove(at: index)
  257. self._saveInfo()
  258. }
  259. /*
  260. - (void):(NSUInteger)index {
  261. }
  262. #pragma mark - NSCoding
  263. - (NSString *)description {
  264. return [NSString stringWithFormat:@"fullName:%@,firstName:%@,middleName:%@,lastName:%@,street1:%@,street2:%@,city:%@,zip:%@,country:%@,email:%@,tel:%@,birthdate:%@,customInfo:%@",self.fullName,self.firstName,self.middleName,self.lastName,self.street1,self.street2,self.city,self.zip,self.country,self.email,self.tel,self.birthDate,self.customInfoArray];
  265. }
  266. */
  267. }
  268. // MARK: - Private Methods
  269. extension KMProfileInfo {
  270. private func _saveInfo() {
  271. let encodedObject = NSKeyedArchiver.archivedData(withRootObject: self)
  272. let defaults = UserDefaults.standard
  273. defaults.set(encodedObject, forKey: KMProfileInfo.KMProfileUnarchiveKey)
  274. defaults.synchronize()
  275. }
  276. private func _setBaseInfo() {
  277. self._fullName = ""
  278. self._firstName = ""
  279. self._middleName = ""
  280. self._lastName = ""
  281. self._street1 = ""
  282. self._street2 = ""
  283. self._city = ""
  284. self._state = ""
  285. self._zip = ""
  286. self._country = ""
  287. self._email = ""
  288. self._tel = ""
  289. self._customInfoArray = []
  290. }
  291. }