ObjectMapper bindings for Moya and RxSwift
Clone or download
Pull request Compare This branch is 1 commit ahead, 59 commits behind bmoliveira:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Sample
Source
.DS_Store
.gitignore
.swift-version
LICENSE
Moya-ObjectMapper.podspec
README.md

README.md

Moya-ObjectMapper

CocoaPods Swift 3.0.x

ObjectMapper bindings for Moya for easier JSON serialization. Includes RxSwift bindings as well.

Installation

Due to the fact that most libraries haven't officially released a Swift 3.0 version, your Podfile needs to have aditional dependency specification.

CocoaPods

pod 'Moya-ObjectMapper', :git => 'https://github.com/ivanbruel/Moya-ObjectMapper'
pod 'Moya', :git => 'https://github.com/Moya/Moya'

The subspec if you want to use the bindings over RxSwift.

pod 'Moya-ObjectMapper/RxSwift', :git => 'https://github.com/ivanbruel/Moya-ObjectMapper'
pod 'Moya', :git => 'https://github.com/Moya/Moya'
pod 'RxSwift', :git => 'https://github.com/ReactiveX/RxSwift'

And the subspec if you want to use the bindings over ReactiveCocoa.

pod 'Moya-ObjectMapper/ReactiveCocoa', :git => 'https://github.com/ivanbruel/Moya-ObjectMapper'
pod 'Moya', :git => 'https://github.com/Moya/Moya'
pod 'ReactiveSwift', :git => 'https://github.com/ReactiveCocoa/ReactiveSwift'

Usage

Create a Class or Struct which implements the Mappable protocol.

import Foundation
import ObjectMapper

// MARK: Initializer and Properties
struct Repository: Mappable {

  var identifier: Int!
  var language: String?
  var url: String!

  // MARK: JSON
  init?(map: Map) { }

  mutating func mapping(map: Map) {
    identifier <- map["id"]
    language <- map["language"]
    url <- map["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.mapArray(Repository) {
              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))
  .mapArray(Repository)
  .subscribe { event -> Void in
    switch event {
    case .Next(let repos):
      self.repos = repos
    case .Error(let error):
      print(error)
    default:
      break
    }
  }.addDisposableTo(disposeBag)

Contributing

Issues and pull requests are welcome!

Author

Ivan Bruel @ivanbruel

License

Moya-ObjectMapper is released under an MIT license. See LICENSE for more information.