How to use Input and output container in Swift
Issue #87
This is a very nifty trick from ios-oss which was built around MVVM pattern. It uses protocol to define input and output, and a container protocol to contain them. Take https://github.com/kickstarter/ios-oss/blob/1f5643f6a769995ccd1bb3826699745e64597ab7/Library/ViewModels/LoginViewModel.swift for example
public protocol LoginViewModelInputs {
}
public protocol LoginViewModelOutputs {
}
public protocol LoginViewModelType {
var inputs: LoginViewModelInputs { get }
var outputs: LoginViewModelOutputs { get }
}
public final class LoginViewModel: LoginViewModelType, LoginViewModelInputs, LoginViewModelOutputs {
public var inputs: LoginViewModelInputs { return self }
public var outputs: LoginViewModelOutputs { return self }
}
Look how LoginViewModel
conforms to 3 protocols. And when you access its input
or output
properties, you are constrained to only LoginViewModelInputs
and LoginViewModelOutputs