Skip to content
forked from devxoul/RxTodo

iOS Todo Application with RxSwift + MVVM

License

Notifications You must be signed in to change notification settings

karamage/RxTodo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RxTodo

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 😁)

Features

  • MVVM design pattern
  • Using RxDataSources
  • Observing model create/update/delete across the view controllers
  • Navigating between view controllers
  • Immutable models and view models

Philisophy

  • 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>
    }

Requirements

  • iOS 8+
  • Swift 2.2
  • CocoaPods (I used 1.0.0)

Screenshots

rxtodo

Contribution

Discussion and pull requests are welcomed 💖 Correcting English grammar is welcomed, too.

License

RxTodo is under MIT license. See the LICENSE for more info.

About

iOS Todo Application with RxSwift + MVVM

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 93.0%
  • Ruby 7.0%