diff --git a/VDS/Protocols/Handlerable.swift b/VDS/Protocols/Handlerable.swift index 31efef48..5c3bade7 100644 --- a/VDS/Protocols/Handlerable.swift +++ b/VDS/Protocols/Handlerable.swift @@ -13,6 +13,7 @@ public enum HandlerableUpdateStrategy { case immediate case delayed case alwaysImmediate + case paused } public protocol Handlerable: AnyObject, Initable, Disabling, Surfaceable { @@ -37,6 +38,8 @@ extension Handlerable { subject.send() case .immediate, .alwaysImmediate: updateView() + case .paused: + break } } @@ -55,3 +58,15 @@ extension Handlerable where Self: UIControl { }).store(in: &subscribers) } } + +extension Handlerable { + @discardableResult func pausedUpdate(_ closure: (_ instance: inout Self) -> Void) -> Self { + var copy = self + let oldStrategy = copy.updateStrategy + copy.updateStrategy = .paused + closure(©) + copy.updateStrategy = oldStrategy + copy.updateView() + return copy + } +}