Keep the screen flow and data handling logic out of your view controllers – let them handle view-stuff only.
ObservableProperty
value wrapper (inspired by Bond)SafeResultClosure
to prevent retain cycles & memory leaks automatically in callbacks (inspired by Delegated)import Bond
in your source code.observeNext() { [unowned self] newValue in
with .didSet(self) { (self, newValue) in
Observable<ValueType>
with ObservableProperty<ValueType>
Observable(value)
with ObservableProperty(value)