From 4fd167cfa3ce6109f45aa76f80b720267e02b797 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 19 Jul 2023 16:03:06 -0500 Subject: [PATCH] added paused update Signed-off-by: Matt Bruce --- VDS/Protocols/Handlerable.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 + } +}