devxoul / RxTodo
- четверг, 7 июля 2016 г. в 03:12:55
Swift
iOS Todo Application with RxSwift + MVVM
RxTodo is an iOS application developed using RxSwift 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.
Bad
viewModel.title
.map { $0 + "!" } // Bad: View should not modify the data
.bindTo(self.titleLabel)
Good
viewModel.title
.bindTo(self.titleLabel)
View doesn't know what ViewModel does. View can only communicate to ViewModel about what View did.
Bad
viewModel.login() // Bad: View should not know what ViewModel does (login)
Good
self.loginButton.rx_tap
.bindTo(viewModel.loginButtonDidTap) // "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.
Bad
struct ProductViewModel {
let product: Driver<Product> // Bad: ViewModel should hide Model
}
Good
struct 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 the LICENSE for more info.