Code Monkey home page Code Monkey logo

rxtodo's Introduction

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.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.

    Bad

    class ProductViewModel {
        let product: Driver<Product> // Bad: ViewModel should hide Model
    }

    Good

    class 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.

rxtodo's People

Contributors

devxoul avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.