From 49b3868acc589faee6684b4020cc2259b6b21e07 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 9 Aug 2022 16:25:37 -0500 Subject: [PATCH] update subscriber Signed-off-by: Matt Bruce --- VDS/Classes/Control.swift | 25 ++++++++----------------- VDS/Classes/View.swift | 26 ++++++++------------------ VDS/Components/Label/Label.swift | 26 +++++++++----------------- 3 files changed, 25 insertions(+), 52 deletions(-) diff --git a/VDS/Classes/Control.swift b/VDS/Classes/Control.swift index eecc62a6..bd07a505 100644 --- a/VDS/Classes/Control.swift +++ b/VDS/Classes/Control.swift @@ -13,8 +13,7 @@ import Combine open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable { @Published public var model: ModelType - private var cancellables = Set() - private var shouldUpdate: Bool = false + private var cancellable: AnyCancellable? open func set(with model: ModelType) { self.model = model @@ -63,23 +62,15 @@ open class Control: UIControl, ModelHandlerable, ViewProto public func initialSetup() { if !initialSetupPerformed { initialSetupPerformed = true - //setup shouldUpdate - $model.sink { [weak self] viewModel in - guard let self = self else { return } - let s = self.shouldUpdateView(viewModel: viewModel) - print("shouldUpdate - \(Self.self): \(s)") - self.shouldUpdate = s - }.store(in: &cancellables) - //setup viewUpdate - $model.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in + cancellable = $model.filter { viewModel in + return self.shouldUpdateView(viewModel: viewModel) + + }.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in guard let self = self else { return } - if self.shouldUpdate { - self.updateView(viewModel: viewModel) - self.shouldUpdate = false - print("didUpdate - \(Self.self)") - } - }.store(in: &cancellables) + self.updateView(viewModel: viewModel) + print("didUpdate - \(Self.self)") + } setup() } } diff --git a/VDS/Classes/View.swift b/VDS/Classes/View.swift index 7e1812cb..8b72726a 100644 --- a/VDS/Classes/View.swift +++ b/VDS/Classes/View.swift @@ -13,8 +13,7 @@ import Combine open class View: UIView, ModelHandlerable, ViewProtocol, Resettable { @Published public var model: ModelType - private var cancellables = Set() - private var shouldUpdate: Bool = false + private var cancellable: AnyCancellable? open func set(with model: ModelType) { self.model = model @@ -62,24 +61,15 @@ open class View: UIView, ModelHandlerable, ViewProtocol, R public func initialSetup() { if !initialSetupPerformed { initialSetupPerformed = true - //setup shouldUpdate - $model.sink { [weak self] viewModel in - guard let self = self else { return } - let s = self.shouldUpdateView(viewModel: viewModel) - print("shouldUpdate - \(Self.self): \(s)") - self.shouldUpdate = s - }.store(in: &cancellables) - //setup viewUpdate - $model.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in + cancellable = $model.filter { viewModel in + return self.shouldUpdateView(viewModel: viewModel) + + }.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in guard let self = self else { return } - if self.shouldUpdate { - self.updateView(viewModel: viewModel) - self.shouldUpdate = false - print("didUpdate - \(Self.self)") - } - }.store(in: &cancellables) - + self.updateView(viewModel: viewModel) + print("didUpdate - \(Self.self)") + } setup() } } diff --git a/VDS/Components/Label/Label.swift b/VDS/Components/Label/Label.swift index afc6f0b2..813fea1f 100644 --- a/VDS/Components/Label/Label.swift +++ b/VDS/Components/Label/Label.swift @@ -18,8 +18,7 @@ open class LabelBase: UILabel, ModelHandlerable, Initable // MARK: - Combine Properties //-------------------------------------------------- @Published public var model: ModelType - private var cancellables = Set() - private var shouldUpdate: Bool = false + private var cancellable: AnyCancellable? //-------------------------------------------------- // MARK: - Properties @@ -95,23 +94,16 @@ open class LabelBase: UILabel, ModelHandlerable, Initable translatesAutoresizingMaskIntoConstraints = false accessibilityCustomActions = [] accessibilityTraits = .staticText - - //setup shouldUpdate - $model.sink { [weak self] viewModel in - guard let self = self else { return } - self.shouldUpdate = self.shouldUpdateView(viewModel: viewModel) - print("shouldUpdate - \(Self.self): \(self.shouldUpdate)") - }.store(in: &cancellables) - + //setup viewUpdate - $model.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in + cancellable = $model.filter { viewModel in + return self.shouldUpdateView(viewModel: viewModel) + + }.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in guard let self = self else { return } - if self.shouldUpdate { - self.updateView(viewModel: viewModel) - self.shouldUpdate = false - print("didUpdate - \(Self.self)") - } - }.store(in: &cancellables) + self.updateView(viewModel: viewModel) + print("didUpdate - \(Self.self)") + } } public func reset() {