Skip to content

memtrip/swift-mvi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MVI Design pattern

A swift example of MVI (model view intent), a design pattern gaining momentum amongst Android developers.

Unidirectional data flow

The design pattern champions a unidirectional data flow. The MxViewModel observes on MxIntent events that are emitted by ui interactions, an action is performed for each intent that is received, each action returns an MxResult, this result is reduced into an MxViewState - an immutable representation of a screen. The ui observes on MxViewState and renders the screen when a new state is received.

The Rx flow

The entire design pattern is driven by a single rx Subject. The Subject observes on the MxIntent events that are emitted from RxCocoa ui elements. The ui observes on the result of the operations performed on the Subject

                                           Observe the MxIntent events
                                  +------+ that are emitted from ui
                                  |      | interactions.
                    +-------------+  UI  ●-------------+
                    |             |      |             ▼  MxIntent
                    |             +--+---+             |  * Perform action
                    |                |                 ▼  MxResult
                    |                |                 |  * Map to representation
                    |                |                 |    of a screen
                    ▲                |                 ▼  MxViewState
                    |                |                 |
                    |                |                 |
                    |                |                 |
                    |          +-----*-------+         |
                    |          |             |         |
                    +----------●  ViewModel  +---------+
Observe the MxViewState events |             |
that are emitted as the result +-------------+
of an intent driven action.

● Observe events
▼ Transform Observable type

More on MVI

Releases

No releases published

Packages

No packages published

Languages