33 lines
904 B
Swift
33 lines
904 B
Swift
//
|
|
// 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)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|