Git Product home page Git Product logo

moya-unbox's Introduction

Moya-Unbox

Carthage compatible

Unbox bindings for Moya for fabulous JSON serialization. Supports RxSwift and ReactiveSwift bindings as well.

Installation

Carthage

github "RyogaK/Moya-Unbox"

Usage

Create a Class or Struct which implements the Unboxable protocol.

import Foundation
import Unbox

struct Repository: Unboxable {

  let identifier: Int
  let language: String?
  let url: URL

  init(unboxer: Unboxer) throws {
    identifier = try unboxer.unbox("id")
    language = unboxer.unbox("language")
    url = try unboxer.unbox("url")
  }
}

1. Without RxSwift

GitHubProvider.request(.UserRepositories(username), completion: { result in

    var success = true
    var message = "Unable to fetch from GitHub"

    switch result {
    case let .Success(response):
        do {
            if let repos = try response.unbox(array: Repository.self) {
              self.repos = repos
            } else {
              success = false
            }
        } catch {
            success = false
        }
        self.tableView.reloadData()
    case let .Failure(error):
        guard let error = error as? CustomStringConvertible else {
            break
        }
        message = error.description
        success = false
    }
})

2. With RxSwift

GitHubProvider.request(.UserRepositories(username))
  .unbox(array: Repository.self)
  .subscribe { event -> Void in
    switch event {
    case .Next(let repos):
      self.repos = repos
    case .Error(let error):
      print(error)
    default:
      break
    }
  }.addDisposableTo(disposeBag)

Key Path Support

You can also unbox at specific keys and key paths by using the unbox(object:, atKey:) and unbox(object:, atKeyPath:) functions (as well as the array equivalents).

Contributing

Feel free to make issues and pull requests!

License

MIT

moya-unbox's People

Contributors

nuudles avatar ryogak avatar scottrhoyt avatar wukerplank avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.