// // Modelable.swift // VDS // // Created by Matt Bruce on 7/22/22. // import Foundation import Combine import UIKit public protocol ModelHandlerable: AnyObject, Initable, Disabling, Surfaceable { var subject: PassthroughSubject { get set } var subscribers: Set { get set } func updateView() } extension ModelHandlerable { public func setupUpdateView() { handlerPublisher() .subscribe(on: RunLoop.main) .sink { [weak self] _ in self?.updateView() } .store(in: &subscribers) } public func handlerPublisher() -> AnyPublisher { subject .eraseToAnyPublisher() .debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main) .eraseToAnyPublisher() } }