Skip to content

Instantly share code, notes, and snippets.

@ncreated
Created August 10, 2017 20:28
Show Gist options
  • Save ncreated/f5caf88603c5367097fa50771493158b to your computer and use it in GitHub Desktop.
Save ncreated/f5caf88603c5367097fa50771493158b to your computer and use it in GitHub Desktop.
Medium blogpost snippet
func manage(change: Observable<Bool>) -> (value: Driver<ToggleValue>, isBusy: Driver<Bool>) {
let storage = self.storage
let initialValue = storage
.read()
.map { ToggleValue.initial($0) }
.catchError { Observable.just( ToggleValue.unknown($0) ) }
let valueAfterSaving = change
.flatMap { valueToSave -> Observable<ToggleValue> in
storage
.save(value: valueToSave)
.map { ToggleValue.updated(valueToSave) }
.catchErrorJustReturn(ToggleValue.fallback(!valueToSave))
}
let value = Observable.merge(initialValue, valueAfterSaving)
.asDriver(onErrorRecover: { Driver.just(ToggleValue.unknown($0)) })
return (value: value, isBusy: .empty())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment