From 0076a1ea21fc6c43e38a500ac6302d49f33e22f9 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 11 Aug 2022 14:13:30 -0500 Subject: [PATCH] updated protocol Signed-off-by: Matt Bruce --- VDS/Classes/Control.swift | 31 ++++++++++++++++++---------- VDS/Classes/View.swift | 30 +++++++++++++++++---------- VDS/Components/Label/Label.swift | 10 +++++---- VDS/Protocols/ModelHandlerable.swift | 5 +++++ 4 files changed, 50 insertions(+), 26 deletions(-) diff --git a/VDS/Classes/Control.swift b/VDS/Classes/Control.swift index ab01bdb1..ecb9738e 100644 --- a/VDS/Classes/Control.swift +++ b/VDS/Classes/Control.swift @@ -10,19 +10,17 @@ import UIKit import Combine -open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable { +open class Control: UIControl, ModelHandlerPublishable, ViewProtocol, Resettable { + //-------------------------------------------------- + // MARK: - Combine Properties + //-------------------------------------------------- @Published public var model: ModelType = ModelType() + public var modelPublished: Published { _model } + public var modelPublisher: Published.Publisher { $model } + public var cancellables = Set() - - open func shouldUpdateView(viewModel: ModelType) -> Bool { - fatalError("Implement shouldUpdateView") - } - - open func updateView(viewModel: ModelType) { - fatalError("Implement updateView") - } - + //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -66,7 +64,7 @@ open class Control: UIControl, ModelHandlerable, ViewProto if !initialSetupPerformed { initialSetupPerformed = true //setup viewUpdate - $model.filter { viewModel in + modelPublisher.filter { viewModel in return self.shouldUpdateView(viewModel: viewModel) }.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in @@ -78,6 +76,17 @@ open class Control: UIControl, ModelHandlerable, ViewProto } } + //-------------------------------------------------- + // MARK: - Overrides + //-------------------------------------------------- + open func shouldUpdateView(viewModel: ModelType) -> Bool { + fatalError("Implement shouldUpdateView") + } + + open func updateView(viewModel: ModelType) { + fatalError("Implement updateView") + } + open func reset() { backgroundColor = .clear } diff --git a/VDS/Classes/View.swift b/VDS/Classes/View.swift index a58278f0..9d1eaa2c 100644 --- a/VDS/Classes/View.swift +++ b/VDS/Classes/View.swift @@ -10,19 +10,16 @@ import UIKit import Combine -open class View: UIView, ModelHandlerable, ViewProtocol, Resettable { - +open class View: UIView, ModelHandlerPublishable, ViewProtocol, Resettable { + + //-------------------------------------------------- + // MARK: - Combine Properties + //-------------------------------------------------- @Published public var model: ModelType = ModelType() + public var modelPublished: Published { _model } + public var modelPublisher: Published.Publisher { $model } public var cancellables = Set() - open func shouldUpdateView(viewModel: ModelType) -> Bool { - fatalError("Implement shouldUpdateView") - } - - open func updateView(viewModel: ModelType) { - fatalError("Implement updateView") - } - //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -66,7 +63,7 @@ open class View: UIView, ModelHandlerable, ViewProtocol, R if !initialSetupPerformed { initialSetupPerformed = true //setup viewUpdate - $model.filter { viewModel in + modelPublisher.filter { viewModel in return self.shouldUpdateView(viewModel: viewModel) }.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in @@ -78,6 +75,17 @@ open class View: UIView, ModelHandlerable, ViewProtocol, R } } + //-------------------------------------------------- + // MARK: - Overrides + //-------------------------------------------------- + open func shouldUpdateView(viewModel: ModelType) -> Bool { + fatalError("Implement shouldUpdateView") + } + + open func updateView(viewModel: ModelType) { + fatalError("Implement updateView") + } + open func reset() { backgroundColor = .clear } diff --git a/VDS/Components/Label/Label.swift b/VDS/Components/Label/Label.swift index 907e1297..0661b681 100644 --- a/VDS/Components/Label/Label.swift +++ b/VDS/Components/Label/Label.swift @@ -12,12 +12,14 @@ import Combine public class Label:LabelBase{} -open class LabelBase: UILabel, ModelHandlerable, Initable, Resettable, ViewProtocol { +open class LabelBase: UILabel, ModelHandlerPublishable, ViewProtocol, Resettable { //-------------------------------------------------- // MARK: - Combine Properties //-------------------------------------------------- @Published public var model: ModelType = ModelType() + public var modelPublished: Published { _model } + public var modelPublisher: Published.Publisher { $model } public var cancellables = Set() //-------------------------------------------------- @@ -95,7 +97,7 @@ open class LabelBase: UILabel, ModelHandlerable, Initable accessibilityTraits = .staticText //setup viewUpdate - $model.filter { viewModel in + modelPublisher.filter { viewModel in return self.shouldUpdateView(viewModel: viewModel) }.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in @@ -121,7 +123,7 @@ open class LabelBase: UILabel, ModelHandlerable, Initable } //-------------------------------------------------- - // MARK: - State + // MARK: - Overrides //-------------------------------------------------- /// Follow the SwiftUI View paradigm /// - Parameter viewModel: state @@ -177,7 +179,7 @@ open class LabelBase: UILabel, ModelHandlerable, Initable text = viewModel.text } } - + //-------------------------------------------------- // MARK: - Actionable //-------------------------------------------------- diff --git a/VDS/Protocols/ModelHandlerable.swift b/VDS/Protocols/ModelHandlerable.swift index bf63f67c..2a80258f 100644 --- a/VDS/Protocols/ModelHandlerable.swift +++ b/VDS/Protocols/ModelHandlerable.swift @@ -26,3 +26,8 @@ extension ModelHandlerable { } } } + +public protocol ModelHandlerPublishable: ModelHandlerable { + var modelPublished: Published { get } + var modelPublisher: Published.Publisher { get } +}