CocoaPods trunk is moving to be read-only. Read more on the blog, there are 18 months to go.

RxApollo 0.6.0

RxApollo 0.6.0

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
 

RxApollo 0.6.0

  • By
  • Scott Hoyt

RxApollo

RxSwift extensions for Apollo.

Installation

Carthage

github "scottrhoyt/RxApollo"

Manual

Add RxApollo.swift to your project.

Usage

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()

Fetch

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)

Watch

// 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)

Mutate

Mutations follow the same pattern as well:

// Let's upvote a post.
apollo.rx.perform(mutation: UpvotePostMutation(postId: postId))
  .subscribe()
  .disposed(by: disposeBag)

License

MIT