Moya-ObjectMapper
ObjectMapper 为 Moya 的绑定,以简化 JSON 序列化。还包括 RxSwift 绑定。
安装
CocoaPods
pod 'Moya-ObjectMapper'
如果你想要在上层使用 RxSwift 的话,这是相应的 subspec。
pod 'Moya-ObjectMapper/RxSwift'
如果你想要在上层使用 ReactiveSwift 的话,这是相应的 subspec。
pod 'Moya-ObjectMapper/ReactiveSwift'
使用方法
创建一个实现 Mappable
协议的 Class
或 Struct
。
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. 不使用 RxSwift 和 ReactiveSwift
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. 与 RxSwift 一起使用
GitHubProvider.request(.userRepositories(username))
.mapArray(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)
2. 与 ReactiveSwift 一起使用
GitHubProvider.request(.userRepositories(username))
.mapArray(Repository.self)
.start { event in
switch event {
case .value(let repos):
self.repos = repos
case .failed(let error):
print(error)
default: break
}
}
贡献
欢迎提交问题和拉取请求!
作者
Ivan Bruel @ivanbruel
维护者
Bruno Oliveira @bmoliveira
许可
Moya-ObjectMapper 根据 MIT 许可发布。有关更多信息,请参阅 LICENSE。