This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let observable = Observable<Int> { (observer) -> Disposable in | |
observer.on(event: .next(1)) | |
observer.on(event: .next(2)) | |
observer.on(event: .completed) | |
return AnonimousDisposable { | |
print("disposed") | |
} | |
} | |
observable.subscribe { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class Sink<O: ObserverType>: Disposable { | |
private var _disposed: Bool = false | |
private let _forward: O | |
private let _subscriptionHandler: (Observer<O.E>) -> Disposable | |
private let _composite = CompositeDisposable() | |
init(forvard: O, subscriptionHandler: @escaping (Observer<O.E>) -> Disposable) { | |
_forward = forvard | |
_subscriptionHandler = subscriptionHandler |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Observable<Element>: ObservableType { | |
public typealias E = Element | |
private let _subscribeHandler: (Observer<Element>) -> Disposable | |
public init(_ subscribtionClosure: @escaping (Observer<Element>) -> Disposable) { | |
_subscribeHandler = subscribtionClosure | |
} | |
public func subscribe<O : ObserverType>(observer: O) -> Disposable where O.E == E { | |
let sink = Sink(forvard: observer, subscribtionHandler: _subscribeHandler) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public protocol ObservableType { | |
associatedtype E | |
func subscribe<O: ObserverType>(observer: O) -> Disposable where O.E == E | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension ObservableType { | |
func paginate<O: ObservableType>(nextPageTrigger: O, | |
hasNextPage: E -> Bool, | |
nextPageFactory: E -> Observable<E>) -> Observable<E> { | |
return flatMap { page -> Observable<E> in | |
if !hasNextPage(page) { | |
return Observable.just(page) | |
} | |
return [ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.... | |
func paginateItems(batch: Batch = Batch.initial, | |
endPoint: EndPoint, | |
nextBatchTrigger: Observable<Void>) -> Observable<Page<[Hero]>> { | |
let params = paramsProvider.pagingListParamsForBatch(batch) | |
return httpClient | |
.request(.GET, endPoint, | |
parameters: paramsProvider.defaultParams + params, | |
encoding: .URL, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//1 | |
let viewModel = HeroListViewModel(uiTriggers:( | |
searchQuery: searchCotroller.searchBar.rx_text.asObservable(), | |
nextPageTrigger: tableView.rx_nextPageTriger, | |
searchNextPageTrigger: searchContentController.tableView.rx_nextPageTriger | |
), | |
api: DefaultHeroAPI(paramsProvider: HeroesParamsProvider.self)) | |
//2 | |
viewModel.mainTableItems | |
.drive(tableView.rx_itemsWithDataSource(dataSource)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class HeroListViewModel { | |
let mainTableItems: Driver<[HeroCellSection]> | |
let searchTableItems: Driver<[HeroCellSection]> | |
let dismissTrigger: Driver<Void> | |
init(uiTriggers: (searchQuery: Observable<String>, | |
nextPageTrigger: Observable<Void>, | |
searchNextPageTrigger: Observable<Void>, | |
dismissTrigger: Driver<Void>), api: HeroAPI) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class HeroListViewModel { | |
let mainTableItems: Driver<[HeroCellSection]> | |
let searchTableItems: Driver<[HeroCellSection]> | |
init(uiTriggers: ( | |
searchQuery: Observable<String>, | |
nextPageTrigger: Observable<Void>, | |
searchNextPageTrigger: Observable<Void> | |
), |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ViewController: UIViewController { | |
let disposeBag = DisposeBag() | |
@IBOutlet var pushButton: UIButton! | |
@IBOutlet var presentButton: UIButton! | |
@IBOutlet weak var dismissButton: UIButton! | |
var voidSegue: ModalSegue<ViewController, SecondViewController, Void> { | |
return ModalSegue(fromViewController: self, | |
toViewControllerFactory: { (sender, context) -> SecondViewController in |