import UIKit import Combine public final class RetrySheetController: UIViewController { enum Action { case retry case delete case cancel } // MARK: UI lazy private var screenView = RetrySheetView() // MARK: Properties var actionPublisher: AnyPublisher<Action, Never> { actionRelay.eraseToAnyPublisher() } private var cancellables = Set<AnyCancellable>() private let actionRelay = PassthroughSubject<Action, Never>() // MARK: Lifecycle public override func loadView() { view = screenView } public override func viewDidLoad() { super.viewDidLoad() setupBindings() } // MARK: Private private func setupBindings() { screenView.retry .publisher(for: .touchUpInside) .sink { [unowned self] in dismiss(animated: true) { [weak actionRelay] in actionRelay?.send(.retry) } }.store(in: &cancellables) screenView.delete .publisher(for: .touchUpInside) .sink { [unowned self] in dismiss(animated: true) { [weak actionRelay] in actionRelay?.send(.delete) } }.store(in: &cancellables) screenView.cancel .publisher(for: .touchUpInside) .sink { [unowned self] in dismiss(animated: true) { [weak actionRelay] in actionRelay?.send(.cancel) } }.store(in: &cancellables) } }