测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可协议 | MIT |
发布上次发布 | 2017年1月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Sunshinejr 维护。
JASON 为 Moya 绑定,通过 RxSwift 和 ReactiveCocoa 绑定,更方便地进行 JSON 序列化。
创建一个实现 Mappable 协议的模式结构体或类。
import JASON
import Moya_JASON
private extension JSONKeys {
static let id = JSONKey<Int>("id")
static let language = JSONKey<String>("language")
static let url = JSONKey<String?>("url")
}
struct Repository: Mappable {
let identifier: Int
let language: String
let url: String?
init(_ json: JSON) throws {
identifier = json[.id]
language = json[.language]
url = json[.url]
}
}
import JASON
import Moya_JASON
public enum UserParsingError: Error {
case login
}
private extension JSONKeys {
static let login = JSONKey<String>("login")
}
struct User: Mappable {
let login: String
init(_ json: JSON) throws {
login = json[.login]
if login.isEmpty {
throw UserParsingError.login
}
}
}
然后您可以使用扩展自 Moya 的响应的方法。这些方法包括
mapObject()
mapObject(withKeyPath:)
mapArray()
mapArray(withKeyPath:)
当使用 mapObject()
尝试将整个响应数据映射到对象时,使用 mapObject(withKeyPath:)
您可以指定响应中的嵌套对象进行获取。例如 mapObject(withKeyPath: "owner")
。 RxSwift
和 ReactiveCocoa
扩展也有这些方法。
provider = MoyaProvider<GitHub>()
provider.request(GitHub.repos("mjacko")) { (result) in
if case .success(let response) = result {
do {
let repos: [Repository] = try response.mapArray()
print(repos)
} catch {
print("There was something wrong with the mapping!")
}
}
}
provider = RxMoyaProvider<GitHub>()
provider
.request(GitHub.repo("Moya/Moya"))
.mapObject(User.self, keyPath: "owner")
.subscribe { event in
switch event {
case .next(let user):
print(user)
case .error(let error):
print(error)
default: break
}
}
provider = ReactiveCocoaMoyaProvider<GitHub>()
provider
.request(GitHub.repos("mjacko"))
.mapArray(Repository.self)
.observeOn(UIScheduler())
.start { event in
switch event {
case .value(let repos):
print(repos)
case .failed(let error):
print(error)
default: break
}
}
Sunshinejr,[email protected],@thesunshinejr
Moya-JASON 可在 MIT 许可证下获得。有关更多信息,请参阅 LICENSE 文件。