Skip to content

Instantly share code, notes, and snippets.

@serhiybutz
Last active August 19, 2020 02:20
Show Gist options
  • Save serhiybutz/1bf5f9a24675a09e012ce3f0c22018cc to your computer and use it in GitHub Desktop.
Save serhiybutz/1bf5f9a24675a09e012ce3f0c22018cc to your computer and use it in GitHub Desktop.
Combine: withLatestFrom, 05
func setupAdvPipeline() {
let searchStream = searchBar.searchTextField.textPublisher
.prepend(searchBar.text!)
.eraseToAnyPublisher()
let sparsedSearchStream = searchStream
.debounce(for: .seconds(0.3), scheduler: DispatchQueue.main)
.eraseToAnyPublisher()
let beginRefreshingStream = refreshControl
.beginRefreshingPublisher
.withLatestFrom(searchStream) // <--
.map { (_, filter) in filter }
.delay(for: 0.3, scheduler: DispatchQueue.main) // simulate netw. delay
.eraseToAnyPublisher()
beginRefreshingStream
.sink(
receiveValue: { filter in
// Dismiss the refresh control.
self.refreshControl.endRefreshing()
})
.store(in: &cancellables)
let joinedStream = sparsedSearchStream
.merge(with: beginRefreshingStream)
.eraseToAnyPublisher()
joinedStream
.sink(
receiveValue: { searchText in
self.filter = searchText
})
.store(in: &cancellables)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment