测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年3月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由 Gustavo Perdomo 维护。
ObjectMapper 为 Moya 提供了 JSON 序列化的绑定,方便使用。还包括 RxSwift 和 ReactiveSwift 的绑定。
创建一个模型结构体或类。它需要实现 Mappable 协议。有关模型创建的更多详细信息,请参见 这里
import Foundation
import ObjectMapper
struct Repository: Mappable {
var identifier: Int!
var name: String!
var fullName: String!
var language: String?
init?(map: Map) {
if map.JSON["id"] == nil {
return nil
}
}
mutating func mapping(map: Map) {
identifier <- map["id"]
name <- map["name"]
fullName <- map["full_name"]
language <- map["language"]
}
}
然后您有了扩展 Moya 响应的方法。这些方法包括
map(to: type, context: MapContext? = nil) // map object
map(to: [type], context: MapContext? = nil) // map array of objects
对于 RxSwift
和 ReactiveCocoa
还提供了可选映射的方法。这些方法包括
mapOptional(to: type, context: MapContext? = nil)
mapOptional(to: [type], context: MapContext? = nil)
请参阅以下示例,或者在示例项目中查看。
provider = MoyaProvider<GitHub>()
provider.request(GitHub.repos(username: "gperdomor")) { (result) in
if case .success(let response) = result {
do {
let repos = try response.map(to: [Repository.self])
print(repos)
} catch Error.jsonMapping(let error) {
print(try? error.mapString())
} catch {
print(":(")
}
}
}
provider = RxMoyaProvider<GitHub>()
provider.request(GitHub.repo(fullName: "gperdomor/sygnaler"))
.map(to: Repository.self)
.subscribe { event in
switch event {
case .next(let repo):
print(repo)
case .error(let error):
print(error)
default: break
}
}
此外,RxSwift 模块包含可选映射。这意味着如果映射失败,映射器不会抛出错误,而是返回 nil。例如
provider = RxMoyaProvider<GitHub>()
provider
.request(GitHub.repos(username: "gperdomor"))
.mapOptional(to: [Repository.self])
.subscribe { event in
switch event {
case .next(let repos):
// Here we can have either nil or [Repository] object.
print(repos)
case .error(let error):
print(error)
default: break
}
}
provider = ReactiveSwiftMoyaProvider<GitHub>()
provider
.request(GitHub.repos(username: "gperdomor"))
.map(to: [Repository.self])
.start { event in
switch event {
case .value(let repos):
print(repos)
case .failed(let error):
print(error)
default: break
}
}
此外,ReactiveSwift 模块包含可选映射。这意味着如果映射失败,映射器不会抛出错误,而是返回 nil。例如
provider = ReactiveSwiftMoyaProvider<GitHub>()
provider
.request(GitHub.repos(username: "gperdomor"))
.mapOptional(to: [Repository.self])
.start { event in
switch event {
case .value(let repos):
// Here we can have either nil or [Repository] object.
print(repos)
case .failed(let error):
print(error)
default: break
}
}
在 Demo 目录中有一个示例项目。要使用它,请运行 pod install
以下载所需的库。祝您愉快!
嘿!喜欢 MoyaObjectMapper 吗?太棒了!我们实际上真的需要您的帮助!
开源不仅仅是写代码。MoyaObjectMapper 需要您的帮助来处理以下任何一项:
如果您对此有任何兴趣,请发送一个拉取请求!在几个贡献之后,我们将您添加为仓库管理员,您可以合并拉取请求并帮助方向盘。
MoyaObjectMapper 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。