CocoaPods trunk is moving to be read-only. Read more on the blog, there are 13 months to go.
| TestsTested | ✓ |
| LangLanguage | SwiftSwift |
| License | MIT |
| ReleasedLast Release | Dec 2017 |
| SwiftSwift Version | 4.0 |
| SPMSupports SPM | ✗ |
Maintained by Scott Hoyt.
| Depends on: | |
| Apollo | ~> 0.7.0 |
| RxSwift | ~> 4.0 |
RxSwift extensions for Apollo.
github "scottrhoyt/RxApollo"Add RxApollo.swift to your project.
All the reactive extensions are encapsulated in the rx property of an ApolloClient.
import Apollo
import RxSwift
import RxApollo
let apollo: ApolloClient
let disposeBag = DisposeBag()Fetching works just how you would expect it to:
// Let's get our hero's name and print it or the error if there is one.
apollo.rx.fetch(query: HeroNameQuery())
.map { $0.hero?.name }
.subscribe(onNext: { heroName in
print("Our hero's name is \(heroName).")
}, onError: { error in
print("Received error: \(error).")
})
.disposed(by: disposeBag)// Let's watch to see if our hero's name changes and print it or the error if there is one.
apollo.rx.watch(query: HeroNameQuery())
.map { $0.hero?.name }
.subscribe(onNext: { heroName in
print("Our hero's name is \(heroName).")
}, onError: { error in
print("Received error: \(error).")
})
.disposed(by: disposeBag)Watching also works quite well with using RxCocoa bindings:
import RxCocoa
let heroField: UITextField
// Let's watch to see if our hero's name changes and set a text field.
apollo.rx.watch(query: HeroNameQuery())
.map { $0.hero?.name }
.asDriver(onErrorJustReturn: nil)
.drive(heroField.rx.text)
.disposed(by: disposeBag)Mutations follow the same pattern as well:
// Let's upvote a post.
apollo.rx.perform(mutation: UpvotePostMutation(postId: postId))
.subscribe()
.disposed(by: disposeBag)MIT