RxTodo is an iOS application developed usingRxSwift and MVVM design pattern. This project is for whom having trouble with learning RxSwift and MVVM due to lack of references. (as I did
View doesn't have control flow. View cannot modify the data. View only knows how to map the data.
viewModel.title .map { $0 + "!" } // Bad: View should not modify the data .bindTo(self.titleLabel)
viewModel.title .bindTo(self.titleLabel)
View doesn't know what ViewModel does. View can only communicate to ViewModel about what View did.
viewModel.login() // Bad: View should not know what ViewModel does (login)
self.loginButton.rx_tap .bindTo(viewModel.loginButton) // "Hey I clicked the login button" self.usernameInput.rx_controlEvent(.EditingDidEndOnExit) .bindTo(viewModel.usernameInputDidReturn) // "Hey I tapped the return on username input"
Model is hidden by ViewModel. ViewModel only exposes the minimum data so that View can render.
class ProductViewModel { let product: Driver<Product> // Bad: ViewModel should hide Model }
class ProductViewModel { let productName: Driver<String> let formattedPrice: Driver<String> let formattedOriginalPrice: Driver<String> let originalPriceHidden: Driver<Bool> }
Discussion and pull requests are welcomed
RxTodo is under MIT license. See theLICENSE for more info.