Skip to content

Instantly share code, notes, and snippets.

View ncreated's full-sized avatar
💭
⚡️

Maciek Grzybowski ncreated

💭
⚡️
View GitHub Profile
@ncreated
ncreated / Autocomplete.swift
Last active July 17, 2017 19:58
Medium blogpost snippet
func autocomplete(text: Observable<String>) -> (result: Driver<AutocompleteResult>,
isBusy: Driver<Bool>) {
let provider = self.provider
let result: Driver<AutocompleteResult> = text
.flatMapLatest { query in
provider
.autocomplete(text: query)
.map { AutocompleteResult.predictions($0) }
.catchError { .just(AutocompleteResult.error($0)) }
@ncreated
ncreated / Autocomplete.swift
Created July 17, 2017 20:09
Medium blogpost snippet
func autocomplete(text: Observable<String>) -> (result: Driver<AutocompleteResult>, isBusy: Driver<Bool>) {
let provider = self.provider
let isLoadingSubject = PublishSubject<Bool>()
let result: Driver<AutocompleteResult> = text
.do(onNext: { _ in isLoadingSubject.onNext(true) })
.flatMapLatest { query -> Observable<AutocompleteResult> in
provider
.autocomplete(text: query)
.map { .predictions($0) }
@ncreated
ncreated / Autocomplete.swift
Created July 17, 2017 20:34
Medium blogpost snippet
func autocomplete(text: Observable<String>) -> (result: Driver<AutocompleteResult>,
isBusy: Driver<Bool>) {
let provider = self.provider
let resultAndLoading: Driver<(result: AutocompleteResult?, loading: Bool)> = text
.flatMapLatest { query -> Observable<(result: AutocompleteResult?, loading: Bool)> in
provider
.autocomplete(text: query)
.map { (result: .predictions($0), loading: false) }
.catchError { .just((result: .error($0), loading: false)) }
@ncreated
ncreated / SearchViewController.swift
Last active July 17, 2017 20:47
Medium blogpost snippet
let autocomplete = Autocomplete(provider: CountryAutocompleteProvider())
let (results, isLoading) = autocomplete.autocomplete(text: inputText)
@ncreated
ncreated / SearchViewController.swift
Last active July 17, 2017 21:00
Medium blogpost snippet
class SearchViewController: UITableViewController {
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet var noResultsView: UIView!
@IBOutlet var errorView: UIView!
@IBOutlet weak var errorMessageLabel: UILabel!
private let disposeBag = DisposeBag()
private let autocomplete = Autocomplete(provider: CountryAutocompleteProvider())
@ncreated
ncreated / AutocompleteTests.swift
Created July 17, 2017 21:07
Medium blogpost snippet
func testItEmitsPredictionsResult() {
let disposeBag = DisposeBag()
let provider = MockAutocompleteProvider()
let autocomplete = Autocomplete(provider: provider)
let input = SimulatedInput()
let mockPrediction = Prediction(predictedText: "Italy",
matchingRange: ("It".startIndex..<"It".endIndex))
let expectation = self.expectation(description: "will emit result")
let (result, _) = autocomplete.autocomplete(text: input.text)
@ncreated
ncreated / Toggle.swift
Last active July 27, 2017 23:09
Toggle - Rx component for saving settings
//
// Toggle.swift
// Switch
//
// Created by Maciek Grzybowski on 28.07.2017.
// Copyright © 2017 ncreated. All rights reserved.
//
import RxSwift
import RxCocoa
@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
}
}
@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 / 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