protocol CurrencyViewModelInput { var reload : AnyObserver < Void > { get set } var selectCurrency : AnyObserver < Currency > { get set } } protocol CurrencyViewModelOutput { var currencies : Driver < [ Currency ] > { get } var showCurrencyDetail : Driver < Currency > { get } } protocol CurrencyViewModelType { var input : CurrencyViewModelInput { get } var output : CurrencyViewModelOutput { get } } struct CurrencyViewModel : CurrencyViewModelType , CurrencyViewModelInput , CurrencyViewModelOutput { var input : CurrencyViewModelInput { return self } var output : CurrencyViewModelOutput { return self } // inputs var selectCurrency : AnyObserver < Currency > var reload : AnyObserver < Void > // outputs var currencies : Driver < [ Currency ] > var showCurrencyDetail : Driver < Currency > init…