Skip to content

Ded77/RxApollo

This branch is up to date with scottrhoyt/RxApollo:master.

Folders and files

NameName
Last commit message
Last commit date
Dec 2, 2017
Dec 2, 2017
Dec 2, 2017
May 9, 2017
May 10, 2017
May 9, 2017
Dec 2, 2017
May 10, 2017
Dec 2, 2017
Dec 2, 2017
Dec 2, 2017
Dec 2, 2017
May 9, 2017
May 10, 2017
Dec 2, 2017

Repository files navigation

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

About

RxSwift extensions for Apollo

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 96.5%
  • Ruby 1.4%
  • Shell 1.2%
  • Objective-C 0.9%