KMAdvertisementTableViewPresenter.swift 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. // KMAdvertisementTablePresenter.swift
  3. // KMAdvertisement
  4. //
  5. // Created by lizhe on 2022/11/28.
  6. //
  7. class KMAdvertisementTableViewPresenter: NSObject {
  8. lazy var modelData: [KMAdvertisementModelSection] = []
  9. var view: AnyObject?
  10. fileprivate weak var delegate: KMAdvertisementTableViewPresenterDelegate?
  11. }
  12. extension KMAdvertisementTableViewPresenter: KMAdvertisementTableViewPresenterProtocol {
  13. /**
  14. 初始化presenter
  15. */
  16. func initPresenter(view:AnyObject, data: KMAdvertisementModel) {
  17. self.delegate = view as? any KMAdvertisementTableViewPresenterDelegate
  18. self.modelData.removeAll()
  19. self.modelData = self.fetchData(data: data.content ?? [])
  20. self.delegate?.showData(presenter: self, data: self.modelData)
  21. }
  22. func fetchData(data: [KMAdvertisementModelSection]) -> [KMAdvertisementModelSection] {
  23. if data.count != 0 {
  24. //获取缓存数据
  25. if (UserDefaults.standard.object(forKey: "KMAdvertisementShowScroll_iOS") == nil) {
  26. UserDefaults.standard.set([], forKey: "KMAdvertisementShowScroll_iOS")
  27. }
  28. let cacheArray: [String] = UserDefaults.standard.object(forKey: "KMAdvertisementShowScroll_iOS") as! [String]
  29. var sectionArray: [KMAdvertisementModelSection] = []
  30. for section in data {
  31. var itemArray: [KMAdvertisementModelItem] = []
  32. for item in section.content! {
  33. if !cacheArray.contains(item.productID ?? "") {
  34. itemArray.append(item)
  35. }
  36. }
  37. section.content = itemArray
  38. sectionArray.append(section)
  39. }
  40. return sectionArray
  41. }
  42. return []
  43. }
  44. func deleteItem(item: KMAdvertisementModelItem) {
  45. //添加数据
  46. if (UserDefaults.standard.object(forKey: "KMAdvertisementShowScroll_iOS") == nil) {
  47. UserDefaults.standard.set([], forKey: "KMAdvertisementShowScroll_iOS")
  48. }
  49. var array: [String] = UserDefaults.standard.object(forKey: "KMAdvertisementShowScroll_iOS") as! [String]
  50. array.append(item.productID!)
  51. UserDefaults.standard.set(array, forKey: "KMAdvertisementShowScroll_iOS")
  52. UserDefaults.standard.synchronize()
  53. self.modelData = self.fetchData(data: self.modelData)
  54. if self.delegate != nil {
  55. self.delegate?.showData(presenter: self, data: self.modelData)
  56. }
  57. }
  58. func cleanAll() {
  59. self.modelData.removeAll()
  60. self.delegate?.showData(presenter: self, data: self.modelData)
  61. }
  62. func free() {
  63. view = nil
  64. delegate = nil
  65. }
  66. }
  67. protocol KMAdvertisementTableViewPresenterDelegate: AnyObject {
  68. /**
  69. @abstract 回调,返回处理后的数据<KMBatchProcessingViewModel>类型
  70. @param presenter
  71. @param data 返回数据
  72. */
  73. func showData(presenter: KMAdvertisementTableViewPresenter, data: Array<KMAdvertisementModelSection>)
  74. }
  75. protocol KMAdvertisementTableViewPresenterProtocol {
  76. /**
  77. @abstract 绑定视图与数据
  78. @param view 视图
  79. @param data 资源 <KMBatchProcessingViewModel>类型
  80. */
  81. func initPresenter(view:AnyObject, data: KMAdvertisementModel)
  82. /**
  83. @abstract 删除item
  84. */
  85. func deleteItem(item: KMAdvertisementModelItem)
  86. /**
  87. @abstract 解除绑定
  88. */
  89. func free()
  90. }