Skip to content

Instantly share code, notes, and snippets.

View ncreated's full-sized avatar
💭
⚡️

Maciek Grzybowski ncreated

💭
⚡️
View GitHub Profile
@ncreated
ncreated / SettingsViewController.swift
Created August 11, 2017 15:24
Medium blogpost snippet
import UIKit
import RxCocoa
import RxSwift
class SettingsViewController: UIViewController {
@IBOutlet weak var settingSwitch1: UISwitch!
@IBOutlet weak var settingSwitch2: UISwitch!
@IBOutlet weak var settingSwitch3: UISwitch!
@IBOutlet weak var settingSwitch4: UISwitch!
@ncreated
ncreated / Toggle.swift
Last active August 10, 2017 21:13
Medium blogpost snippet
func manage(change: Observable<Bool>) -> (value: Driver<ToggleValue>, isBusy: Driver<Bool>) {
let storage = self.storage
let isBusySubject = PublishSubject<Bool>()
let isBusy = isBusySubject
.asDriver(onErrorJustReturn: false)
.startWith(true)
let initialValue = storage
.read()
@ncreated
ncreated / Toggle.swift
Created August 10, 2017 20:28
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
@ncreated
ncreated / Toggle.swift
Created August 10, 2017 16:11
Medium blogpost snippet
func manage(change: Observable<Bool>) -> (value: Driver<ToggleValue>, isBusy: Driver<Bool>) {
// ...
let storage = self.storage
let valueAfterSaving = change
.flatMap { valueToSave -> Observable<ToggleValue> in
storage
.save(value: valueToSave)
.map { ToggleValue.updated(valueToSave) }
@ncreated
ncreated / Toggle.swift
Created August 10, 2017 15:50
Medium blogpost snippet
func manage(change: Observable<Bool>) -> (value: Driver<ToggleValue>, isBusy: Driver<Bool>) {
// ...
let initialValue = storage
.read()
.map { ToggleValue.initial($0) }
.catchError { Observable.just( ToggleValue.unknown($0) ) }
// ...
}
@ncreated
ncreated / ToggleValue.swift
Created August 10, 2017 15:41
Medium blogpost snippet
enum ToggleValue {
/// Initial value read from storage
case initial(Bool)
/// Updated value after successfully saving in storage
case updated(Bool)
/// Fallback value after unsuccessfully saving in storage
case fallback(Bool)
@ncreated
ncreated / Toggle.swift
Created August 10, 2017 15:32
Medium blogpost snippet
import RxSwift
import RxCocoa
final class Toggle {
// MARK: - Properties
private let storage: ToggleStorage
// MARK: - Initializer
@ncreated
ncreated / NetworkToggleStorage.swift
Created August 10, 2017 14:01
Medium blogpost snippet
import RxSwift
final class NetworkToggleStorage: ToggleStorage {
// MARK: - Properties
private var value: Bool
// MARK: - Initializers
@ncreated
ncreated / ToggleStorage.swift
Created August 10, 2017 13:56
Medium blogpost snippet
import RxSwift
protocol ToggleStorage {
func read() -> Observable<Bool>
func save(value: Bool) -> Observable<Void>
}
@ncreated
ncreated / Toggle.swift
Created August 10, 2017 12:43
Medium blogpost snippet
import RxSwift
import RxCocoa
final class Toggle {
func manage(change: Observable<Bool>) -> (value: Driver<ToggleValue>,
isBusy: Driver<Bool>) {
return (value: .empty(), isBusy: .empty()) // TODO
}
}