added withable
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
b3483053f6
commit
017f7eadb0
@ -45,6 +45,7 @@
|
||||
EAB1D2A128A598FE00DAE764 /* UsesAutoLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D2A028A598FE00DAE764 /* UsesAutoLayout.swift */; };
|
||||
EAB1D2A328A5994800DAE764 /* Debuggable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D2A228A5994800DAE764 /* Debuggable.swift */; };
|
||||
EAB1D2C728A6E76300DAE764 /* ModelHandlerPublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D2C628A6E76300DAE764 /* ModelHandlerPublisher.swift */; };
|
||||
EAB1D2CD28ABE76100DAE764 /* Withable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D2CC28ABE76000DAE764 /* Withable.swift */; };
|
||||
EAF7F0952899861000B287F5 /* Checkbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0932899861000B287F5 /* Checkbox.swift */; };
|
||||
EAF7F0962899861000B287F5 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0942899861000B287F5 /* CheckboxModel.swift */; };
|
||||
EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0992899B17200B287F5 /* CATransaction.swift */; };
|
||||
@ -126,6 +127,7 @@
|
||||
EAB1D2A028A598FE00DAE764 /* UsesAutoLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsesAutoLayout.swift; sourceTree = "<group>"; };
|
||||
EAB1D2A228A5994800DAE764 /* Debuggable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Debuggable.swift; sourceTree = "<group>"; };
|
||||
EAB1D2C628A6E76300DAE764 /* ModelHandlerPublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelHandlerPublisher.swift; sourceTree = "<group>"; };
|
||||
EAB1D2CC28ABE76000DAE764 /* Withable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Withable.swift; sourceTree = "<group>"; };
|
||||
EAF7F0932899861000B287F5 /* Checkbox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checkbox.swift; sourceTree = "<group>"; };
|
||||
EAF7F0942899861000B287F5 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = "<group>"; };
|
||||
EAF7F0992899B17200B287F5 /* CATransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CATransaction.swift; sourceTree = "<group>"; };
|
||||
@ -289,6 +291,7 @@
|
||||
EAF7F0A5289B0CE000B287F5 /* Resetable.swift */,
|
||||
EA3361C8289054C50071C351 /* Surfaceable.swift */,
|
||||
EA3361B7288B2AAA0071C351 /* ViewProtocol.swift */,
|
||||
EAB1D2CC28ABE76000DAE764 /* Withable.swift */,
|
||||
);
|
||||
path = Protocols;
|
||||
sourceTree = "<group>";
|
||||
@ -537,6 +540,7 @@
|
||||
EA33622C2891E73B0071C351 /* FontProtocol.swift in Sources */,
|
||||
EAF7F11728A1475A00B287F5 /* RadioButton.swift in Sources */,
|
||||
EAB1D2A128A598FE00DAE764 /* UsesAutoLayout.swift in Sources */,
|
||||
EAB1D2CD28ABE76100DAE764 /* Withable.swift in Sources */,
|
||||
EAF7F0952899861000B287F5 /* Checkbox.swift in Sources */,
|
||||
EA3361C9289054C50071C351 /* Surfaceable.swift in Sources */,
|
||||
EA3361A2288B1E840071C351 /* ToggleModel.swift in Sources */,
|
||||
|
||||
@ -11,9 +11,3 @@ public struct Constants {
|
||||
public static let ModelStateDebounce = 0.02
|
||||
public static let PaddingOne = 10.0
|
||||
}
|
||||
|
||||
public func updated <T> (_ value: T, with update: (inout T) -> Void) -> T {
|
||||
var editable = value
|
||||
update(&editable)
|
||||
return editable
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ public class RadioButtonGroupBase<RadioButtonGroupModelType: RadioButtonGroupMod
|
||||
newHasError = false
|
||||
}
|
||||
let selectors = model.selectors.compactMap { existing in
|
||||
return updated(existing){
|
||||
return existing.with {
|
||||
$0.hasError = newHasError
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ open class SelectorGroupBase<SelectorType, SelectorGroupType: SelectorGroupModel
|
||||
|
||||
private func updateSelectors(){
|
||||
let selectors = model.selectors.compactMap { existing in
|
||||
return updated(existing){
|
||||
return existing.with {
|
||||
$0.disabled = disabled
|
||||
$0.surface = surface
|
||||
}
|
||||
|
||||
@ -7,6 +7,6 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol Modelable: Surfaceable, Disabling, Initable {
|
||||
public protocol Modelable: Surfaceable, Disabling, Initable, Withable {
|
||||
|
||||
}
|
||||
|
||||
50
VDS/Protocols/Withable.swift
Normal file
50
VDS/Protocols/Withable.swift
Normal file
@ -0,0 +1,50 @@
|
||||
//
|
||||
// Withable.swift
|
||||
// VDS
|
||||
//
|
||||
// Created by Matt Bruce on 8/16/22.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// MARK: - Withable for Objects
|
||||
public protocol ObjectWithable: AnyObject {
|
||||
|
||||
associatedtype T
|
||||
|
||||
/// Provides a closure to configure instances inline.
|
||||
/// - Parameter closure: A closure `self` as the argument.
|
||||
/// - Returns: Simply returns the instance after called the `closure`.
|
||||
@discardableResult func with(_ closure: (_ instance: T) -> Void) -> T
|
||||
}
|
||||
|
||||
public extension ObjectWithable {
|
||||
|
||||
@discardableResult func with(_ closure: (_ instance: Self) -> Void) -> Self {
|
||||
closure(self)
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
extension NSObject: ObjectWithable { }
|
||||
|
||||
|
||||
// MARK: - Withable for Values
|
||||
public protocol Withable {
|
||||
|
||||
associatedtype T
|
||||
|
||||
/// Provides a closure to configure instances inline.
|
||||
/// - Parameter closure: A closure with a mutable copy of `self` as the argument.
|
||||
/// - Returns: Simply returns the mutated copy of the instance after called the `closure`.
|
||||
@discardableResult func with(_ closure: (_ instance: inout T) -> Void) -> T
|
||||
}
|
||||
|
||||
public extension Withable {
|
||||
|
||||
@discardableResult func with(_ closure: (_ instance: inout Self) -> Void) -> Self {
|
||||
var copy = self
|
||||
closure(©)
|
||||
return copy
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user