测试测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布时间最后发布 | 2017年3月 |
Swift 版本Swift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由 Gustavo Perdomo 维护。
Unbox 为 Moya 提供了绑定,以便更容易进行 JSON 序列化。还包括 RxSwift 和 ReactiveSwift 绑定。
创建一个模型结构体或类。它需要实现协议 Unboxable。有关模型创建的更多详细信息,请参阅 这里
import Foundation
import Unbox
struct Repository: Unboxable {
let identifier: Int
let name: String
let fullName: String
let language: String? // Optional property
init(unboxer: Unboxer) throws {
identifier = try unboxer.unbox(key: "id")
name = try unboxer.unbox(key: "name")
fullName = try unboxer.unbox(key: "full_name")
language = unboxer.unbox(key: "language")
}
}
然后您将拥有扩展 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)
请参阅下面的示例或在示例项目中。
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
}
}
示例目录中有示例项目。要使用它,运行 pod install
下载所需的库。祝您玩得开心!
嘿!喜欢MoyaUnbox吗?太棒了!我们实际上真的需要您的帮助!
开源不仅仅是编写代码。MoyaUnbox需要在以下方面得到您的帮助
如果您觉得这些很酷,请发送合并请求!贡献几次之后,我们会将您设为存储库管理员,以便您可以合并合并请求并帮助掌舵
MoyaUnbox可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。