provider = MoyaProvider<GitHub>()
provider.request(.zen) { result in
switch result {
case let .success(response):
let decoder = CleanJSONDecoder()
let model = response.map(Model.self, using: decoder)
case let .failure(error):
// this means there was a network failure - either the request
// wasn't sent (connectivity), or no response was received (server
// timed out). If the server responds with a 4xx or 5xx error, that
// will be sent as a ".success"-ful response.
}
}
For RxMoya
provider = MoyaProvider<GitHub>()
let decoder = CleanJSONDecoder()
provider.rx.request(.userProfile("ashfurrow"))
.map(Model.self, using: decoder)
.subscribe { event in
switch event {
case let .success(model):
// do someting
case let .error(error):
print(error)
}
}
CleanJSON
继承自 JSONDecoder,在标准库源码基础上做了改动,以解决 JSONDecoder 各种解析失败的问题,如键值不存在,值为 null,类型不一致。
Example
To run the example project, clone the repo, and run
pod install
from the Example directory first.Requirements
Installation
CleanJSON is available through CocoaPods or Carthage. To install it, simply add the following line to your Podfile or Cartfile:
Podfile
Cartfile
Import
Usage
Normal
Enum
对于枚举类型请遵循
CaseDefaultable
协议,如果解析失败会返回默认 caseNote: 枚举使用强类型解析,关联类型和数据类型不一致不会进行类型转换,会解析为默认 case
Customize decoding strategy
可以通过
valueNotFoundDecodingStrategy
在值为 null 或类型不匹配的时候自定义解码,默认策略请看这里可以通过
JSONStringDecodingStrategy
将 JSON 格式的字符串自动转成Codable
对象或数组为
keyDecodingStrategy
新增了一个自定义映射器,可以只映射指定 coding path 的 keyFor Moya
使用
Moya.Response
自带的 map 方法解析,传入CleanJSONDecoder
For RxMoya
Author
Pircate, swifter.dev@gmail.com
License
CleanJSON is available under the MIT license. See the LICENSE file for more info.