Skip to content

Instantly share code, notes, and snippets.

@Kishimotovn
Created March 22, 2017 12:54
Show Gist options
  • Save Kishimotovn/f6a40bfe005fc68c19e81dc69e6d0755 to your computer and use it in GitHub Desktop.
Save Kishimotovn/f6a40bfe005fc68c19e81dc69e6d0755 to your computer and use it in GitHub Desktop.
let (refreshSignal, refreshObserver) = SignalProducer<InputType?, NoError>.buffer(2)
self.refreshSignal = refreshSignal
self.refreshObserver = refreshObserver
let (contentChangesSignal, contentChangesObserver) = Signal<OutputType, NoError>.pipe()
self.contentChangesSignal = contentChangesSignal
self.contentChangesObserver = contentChangesObserver
let (errorSignal, errorObserver) = Signal<NSError, NoError>.pipe()
self.errorSignal = errorSignal
self.errorObserver = errorObserver
if let trigger = lifetimeTrigger {
viewLifetime.producer
.filter { (lifetime:ViewLifetime) -> Bool in
return lifetime == trigger
}.map { _ in nil }
.start(refreshObserver)
}
refreshSignal
.flatMap(refreshFlattenStrategy) { (input) -> SignalProducer<OutputType, NoError> in
let p = self.loadingProducerWithInput(input)
.on(started: { self.isLoading.value = true }, terminated: { self.isLoading.value = false })
.flatMapError({ (error) -> SignalProducer<OutputType, NoError> in
self.errorObserver.sendNext(error)
return SignalProducer.empty
})
return p
}
.observeOn(UIScheduler())
.startWithNext { [weak self] (nextValue) in
self?.loadedContent = nextValue
if let obs = self?.contentChangesObserver {
obs.sendNext(nextValue)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment