// // Changeable.swift // VDS // // Created by Matt Bruce on 4/3/23. // import Foundation import UIKit import Combine public protocol Changeable: ViewProtocol where Self: UIControl { /// Sets the primary Subscriber used for the UIControl event .valueChanged. var onChangeSubscriber: AnyCancellable? { get set } } extension Changeable { /// Allows the setting of a completion block against the onChangeSubscriber cancellable. This will /// completion block will get executed against the UIControl publisher for the 'valueChange' action. public var onChange: ((Self) -> ())? { get { return nil } set { onChangeSubscriber?.cancel() if let newValue { onChangeSubscriber = publisher(for: .valueChanged) .sink { c in newValue(c) } } } } }