测试测试过的 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年3月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由Gustavo Perdomo 维护。
ModelMapper 为 Moya 提供了模型映射功能,这样就更容易进行 JSON 序列化。还包含 RxSwift 和 ReactiveSwift 的映射。
创建一个实现协议 Mappable 的 model 结构体或类。有关模型创建的更多详情请参阅这里
import Foundation
import Mapper
struct Repository: Mappable {
let identifier: Int
let name: String
let fullName: String
let language: String? // Optional property
init(map: Mapper) throws {
try identifier = map.from("id")
try name = map.from("name")
try fullName = map.from("full_name")
language = map.optionalFrom("language") // Optional property
}
}
然后,您有了扩展 Moya 响应的方法。这些方法包括
map(to: type) // map object
map(to: type, fromKey: key) // map object
map(to: [type]) // map array of objects
map(to: [type], fromKey: key) // map array of objects
在 map(to: type)
尝试将整个响应数据映射到对象时,使用 map(to: type, fromKey: key)
您可以指定响应中的嵌套对象进行检索。例如 map(to: type, fromKey: "data.response.user")
将遍历数据字典,然后是响应字典,再然后是用户字典,它将解析它。
对于 RxSwift
和 ReactiveSwift
,还提供了可选映射的方法。这些方法包括
mapOptional(to: type)
mapOptional(to: type, fromKey: key)
mapOptional(to: [type])
mapOptional(to: [type], fromKey: key)
请参阅以下示例或 Demo 项目中的示例。
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
来下载必需的库。祝您玩得开心!
嗨!喜欢 MoyaModelMapper 吗?太棒了!我们实际上非常需要您的帮助!
开源不仅仅是编写代码。MoyaModelMapper 在以下方面需要您的帮助:
如果您对此有任何兴趣,请发送拉取请求!贡献几次后,我们将让您成为仓库管理员,以便您可以合并拉取请求并帮助引领项目。
MoyaModelMapper 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。