outputs: SampleViewModelOutputs { get } var coordinatorOutputs: SampleViewModelCoordinatorOutputs { get } } protocol SampleViewModelInputs { var viewWillAppear: PublishRelay<Void> { get } var okButtonDidTap: PublishRelay<Void> { get } } protocol SampleViewModelOutputs { var isOkButtonEnabled: Driver<Bool> { get } var showError: Signal<Sample.Error> { get } } protocol SampleViewModelCoordinatorOutputs { var show: Signal<SampleViewModel.RequestScreen> { get } } final class SampleViewModel: SampleViewModelInputs, SampleViewModelOutputs, SampleViewModelCoordinatorOutputs, SampleViewModeling { var inputs: SampleViewModelInputs { return self }