To run the example project, clone the repo, and run pod install
from the Example directory first.
Moya-Argo is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "Moya-Argo"
There are subspecs available for RxSwift and Reactive cocoa if you are using Moya/RxSwift or Moya/ReactiveCocoa. The pod names are Moya-Argo/RxSwift
and Moya-Argo/ReactiveCocoa
respectively
The first step is having a class / struct which can be mapped by Argo
struct ArgoUser: Decodable {
let id: Int
let name: String
let birthdate: String?
static func decode(json: JSON) -> Decoded<ArgoUser> {
return curry(ArgoUser.init)
<^> json <| "id"
<*> json <| "name"
<*> json <|? "birthdate"
}
}
If you have a request setup with Moya already, you can use the mapObject
and mapArray
methods on the response:
provider
.request(.AllUsers) { result in
if case let .Success(response) = result {
do {
let argoUsers:[ArgoUser] = try response.mapArrayWithRootKey("users")
print("mapped to users: \(argoUsers)")
} catch {
print("Error mapping users: \(error)")
}
}
}
If you are using the Moya RxSwift extensions, there is an extension on Observable which will simplify the mapping:
provider
.request(.AllUsers)
.mapArray(ArgoUser.self, rootKey: "users")
.observeOn(MainScheduler.instance)
.subscribeNext { users in
self.users = users
self.tableView.reloadData()
}.addDisposableTo(disposeBag)
Or for ReactiveCocoa, there are similar extensions on SignalProducer:
provider
.request(.AllUsers)
.mapArray(ArgoUser.self, rootKey: "users")
.observeOn(UIScheduler())
.start { event in
switch event {
case .Next(let users):
self.users = users
self.tableView.reloadData()
case .Failed(let error):
print("error: \(error)")
default: break
}
}
The example project shows some example methods which can be used to improve the readability of your code
Issues / Pull Requests / Feedback welcome
I took a lot of guidance from the Moya-ObjectMapper project. If you are using ObjectMapper for your serialisation you should definitely check them out.
Sam Watts, samuel.watts@gmail.com
Moya-Argo is available under the MIT license. See the LICENSE file for more info.