KMHeaderFooterManager.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import Foundation
  2. private let kHeaderFooterInfoSaveKey = "kHeaderFooterInfoSaveKey"
  3. class KMHeaderFooterManager: NSObject, NSCoding {
  4. var headFooterObjects: [KMHeaderFooterObject] = []
  5. static let defaultManager = KMHeaderFooterManager()
  6. override init() {
  7. super.init()
  8. self.reloadData()
  9. }
  10. required init?(coder: NSCoder) {
  11. if let data = coder.decodeObject(forKey: "headFooterObjects") {
  12. headFooterObjects = data as? [KMHeaderFooterObject] ?? []
  13. }
  14. }
  15. func encode(with coder: NSCoder) {
  16. coder.encode(headFooterObjects, forKey: "headFooterObjects")
  17. }
  18. func reloadData() {
  19. do {
  20. if let storedData = UserDefaults.standard.value(forKey: kHeaderFooterInfoSaveKey) as? Data {
  21. NSKeyedUnarchiver.setClass(KMHeaderFooterObject.self, forClassName: "KMHeaderFooterObject")
  22. NSKeyedUnarchiver.setClass(KMHeaderFooterManager.self, forClassName: "KMHeaderFooterManager")
  23. if let man = NSKeyedUnarchiver.unarchiveObject(with: storedData) as? KMHeaderFooterManager {
  24. self.headFooterObjects = man.headFooterObjects
  25. print(man)
  26. }
  27. }
  28. } catch {
  29. // 解档失败,处理错误情况
  30. print("Error unarchiving data: \(error)")
  31. }
  32. }
  33. var onlyHeaderFooterObjects: [KMHeaderFooterObject] {
  34. return headFooterObjects.filter { !$0.isBates }
  35. }
  36. var onlyBatesObjects: [KMHeaderFooterObject] {
  37. var arr: [KMHeaderFooterObject] = []
  38. for obj in headFooterObjects {
  39. if KMDataVersionManager.updateBatesData() {
  40. KMDataVersionManager.refrshBatesData(bates: obj)
  41. store()
  42. }
  43. if obj.isBates {
  44. arr.append(obj)
  45. }
  46. }
  47. return arr
  48. }
  49. var dateFormatArray: [String] {
  50. return [
  51. "m/d",
  52. "m/d/yy",
  53. "m/d/yyyy",
  54. "mm/dd/yy",
  55. "mm/dd/yyyy",
  56. "d/m/yy",
  57. "d/m/yyyy",
  58. "dd/mm/yy",
  59. "dd/mm/yyyy",
  60. "mm/yy",
  61. "mm/yyyy",
  62. "m.d.yy",
  63. "m.d.yyyy",
  64. "mm.dd.yy",
  65. "mm.dd.yyyy",
  66. "mm.yy",
  67. "mm.yyyy",
  68. "d.m.yy",
  69. "d.m.yyyy",
  70. "dd.mm.yy",
  71. "dd.mm.yyyy",
  72. "yy-mm-dd",
  73. "yyyy-mm-dd"
  74. ]
  75. }
  76. func removeHeaderFooter(_ obj: KMHeaderFooterObject) -> Bool {
  77. headFooterObjects.removeAll { $0 === obj }
  78. store()
  79. return true
  80. }
  81. func removeAllHeaderFooter() -> Bool {
  82. headFooterObjects.removeAll()
  83. store()
  84. return true
  85. }
  86. func addHeaderFooter(_ obj: KMHeaderFooterObject) -> Bool {
  87. headFooterObjects.insert(obj, at: 0)
  88. store()
  89. return true
  90. }
  91. func store() {
  92. do {
  93. let encodedObject = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
  94. UserDefaults.standard.set(encodedObject, forKey: kHeaderFooterInfoSaveKey)
  95. UserDefaults.standard.synchronize()
  96. } catch {
  97. print("Error while encoding object: \(error)")
  98. }
  99. }
  100. func clearStored() {
  101. UserDefaults.standard.removeObject(forKey: kHeaderFooterInfoSaveKey)
  102. UserDefaults.standard.synchronize()
  103. }
  104. func fetchHeaderFooterAvailableName() -> String {
  105. var availableIndex = 0
  106. let nameArray = onlyHeaderFooterObjects.map { $0.id }
  107. for string in nameArray {
  108. if string.hasPrefix("HeaderFooter") {
  109. let index = Int(string.suffix(from: "HeaderFooter".endIndex)) ?? 0
  110. if index >= availableIndex {
  111. availableIndex = index + 1
  112. }
  113. }
  114. }
  115. return "HeaderFooter\(availableIndex)"
  116. }
  117. func fetchBatesAvailableName() -> String {
  118. var availableIndex = 0
  119. let nameArray = onlyBatesObjects.map { $0.id }
  120. for string in nameArray {
  121. if string.hasPrefix("Bates") {
  122. let index = Int(string.suffix(from: "Bates".endIndex)) ?? 0
  123. if index >= availableIndex {
  124. availableIndex = index + 1
  125. }
  126. }
  127. }
  128. return "Bates\(availableIndex)"
  129. }
  130. }