Skip to content
This repository has been archived by the owner on Dec 5, 2019. It is now read-only.
/ Moya-Unbox Public archive

[DEPRECATED!!] Unbox bindings for Moya and RxSwift

License

Notifications You must be signed in to change notification settings

RyogaK/Moya-Unbox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Moya-Unbox

Carthage compatible

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

DEPRECATED!!

It is no longer need to use Unbox in Swift4.
For more detail: https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

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

About

[DEPRECATED!!] Unbox bindings for Moya and RxSwift

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages