https://github.com/memtrip/swift-mvi
MVI design pattern in swift
https://github.com/memtrip/swift-mvi
mvi mvi-architecture swift
Last synced: 3 months ago
JSON representation
MVI design pattern in swift
- Host: GitHub
- URL: https://github.com/memtrip/swift-mvi
- Owner: memtrip
- License: apache-2.0
- Created: 2018-06-26T08:43:55.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-07-10T14:40:00.000Z (about 7 years ago)
- Last Synced: 2024-08-09T13:17:38.932Z (about 1 year ago)
- Topics: mvi, mvi-architecture, swift
- Language: Swift
- Size: 134 KB
- Stars: 24
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## 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](http://reactivex.io/documentation/subject.html). 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
- http://hannesdorfmann.com/android/model-view-intent
- https://github.com/memtrip/android-mvi
- https://github.com/cyclejs/cyclejs