refactored again, removed protocol and enforce base class of subject

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-09-08 17:39:24 -05:00
parent 1129ac4468
commit dbfce2c999
8 changed files with 10 additions and 15 deletions

View File

@ -9,7 +9,8 @@ import Foundation
import UIKit import UIKit
import Combine import Combine
open class Control<ModelType: Modelable>: UIControl, ModelHandlerControlable, ViewProtocol, Resettable {
open class Control<ModelType: Modelable>: UIControl, ModelHandlerable, ViewProtocol, Resettable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Combine Properties // MARK: - Combine Properties

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
import UIKit import UIKit
public class SelectorGroupHandlerBase<GroupModelType: SelectorGroupModelable, ModelHandlerType: ModelHandlerable<GroupModelType.SelectorModelType> & UIControl>: Control<GroupModelType>, Changable { public class SelectorGroupHandlerBase<GroupModelType: SelectorGroupModelable, ModelHandlerType: Control<GroupModelType.SelectorModelType>>: Control<GroupModelType>, Changable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Public Properties // MARK: - Public Properties
@ -97,7 +97,7 @@ public class SelectorGroupHandlerBase<GroupModelType: SelectorGroupModelable, Mo
} }
public class SelectorGroupSelectedHandlerBase<GroupModelType: SelectorGroupSelectedModelable, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupHandlerBase<GroupModelType, ModelHandlerType> where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { public class SelectorGroupSelectedHandlerBase<GroupModelType: SelectorGroupSelectedModelable, ModelHandlerType: Control<GroupModelType.SelectorModelType>>: SelectorGroupHandlerBase<GroupModelType, ModelHandlerType> where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
public var selectedModel: ModelHandlerType.ModelType? { public var selectedModel: ModelHandlerType.ModelType? {
return model.selectedModel return model.selectedModel

View File

@ -10,7 +10,7 @@ import UIKit
import Combine import Combine
open class View<ModelType: Modelable>: UIView, ModelHandlerViewable, ViewProtocol, Resettable { open class View<ModelType: Modelable>: UIView, ModelHandlerable, ViewProtocol, Resettable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Combine Properties // MARK: - Combine Properties

View File

@ -23,7 +23,7 @@ public class CheckboxGroup: CheckboxGroupBase<DefaultCheckboxGroupModel, Checkbo
} }
} }
public class CheckboxGroupBase<GroupModelType: CheckboxGroupModel, ModelHandlerType: ModelHandlerControlable<GroupModelType.SelectorModelType>>: SelectorGroupHandlerBase<GroupModelType, ModelHandlerType> { public class CheckboxGroupBase<GroupModelType: CheckboxGroupModel, ModelHandlerType: CheckboxBase<GroupModelType.SelectorModelType>>: SelectorGroupHandlerBase<GroupModelType, ModelHandlerType> {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Public Properties // MARK: - Public Properties

View File

@ -31,7 +31,7 @@ public class RadioBoxGroup: RadioBoxGroupBase<DefaultRadioBoxGroupModel, RadioBo
} }
} }
public class RadioBoxGroupBase<GroupModelType: RadioBoxGroupModel, ModelHandlerType: ModelHandlerControlable<GroupModelType.SelectorModelType>>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType> { public class RadioBoxGroupBase<GroupModelType: RadioBoxGroupModel, ModelHandlerType: RadioBoxBase<GroupModelType.SelectorModelType>>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType> {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Private Properties // MARK: - Private Properties

View File

@ -34,7 +34,7 @@ public class RadioButtonGroup: RadioButtonGroupBase<DefaultRadioButtonGroupModel
} }
} }
public class RadioButtonGroupBase<GroupModelType: RadioButtonGroupModel, ModelHandlerType: ModelHandlerControlable<GroupModelType.SelectorModelType>>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType> { public class RadioButtonGroupBase<GroupModelType: RadioButtonGroupModel, ModelHandlerType: RadioButtonBase<GroupModelType.SelectorModelType>>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType> {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Public Properties // MARK: - Public Properties

View File

@ -32,7 +32,7 @@ public class RadioSwatchGroup: RadioSwatchGroupBase<DefaultRadioSwatchGroupModel
} }
public class RadioSwatchGroupBase<GroupModelType: RadioSwatchGroupModel, ModelHandlerType: ModelHandlerControlable<GroupModelType.SelectorModelType>>: Control<GroupModelType>, Changable, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate { public class RadioSwatchGroupBase<GroupModelType: RadioSwatchGroupModel, ModelHandlerType: RadioSwatchBase<GroupModelType.SelectorModelType>>: Control<GroupModelType>, Changable, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Public Properties // MARK: - Public Properties

View File

@ -9,7 +9,7 @@ import Foundation
import Combine import Combine
import UIKit import UIKit
public protocol ModelHandlerable<ModelType>: AnyObject, Initable { public protocol ModelHandlerable: AnyObject, Initable {
associatedtype ModelType: Modelable associatedtype ModelType: Modelable
var model: ModelType { get set } var model: ModelType { get set }
var modelPublisher: Published<ModelType>.Publisher { get } var modelPublisher: Published<ModelType>.Publisher { get }
@ -42,9 +42,3 @@ extension ModelHandlerable {
.store(in: &subscribers) .store(in: &subscribers)
} }
} }
//enforment of a specific class, helps later with subclassing using generics
//https://sarunw.com/posts/how-to-declare-swift-protocol-for-specific-class/
public protocol ModelHandlerControlable<ModelType>: ModelHandlerable, UIControl {}
public protocol ModelHandlerViewable<ModelType>: ModelHandlerable, UIView {}