FlexyNetwork
专门为 Swift 编写的常见任务的 iOS 网络框架
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。关于使用和安装说明,请访问他们的网站。要将 FlexyNetwork 集成到使用 CocoaPods 的 Xcode 项目中,在您的 Podfile
中指定它。
pod 'FlexyNetwork'
用法
通过实现HTTPRequestRepresentable协议(或其子协议之一)来定义你的请求
例如,让我们考虑以下图片请求
struct ExampleRequest: HTTPGETRequest {
var parameters: JSON?
var headerFields: [String : String]?
var path: String {
return "https://avatars.mds.yandex.net/get-pdb/51720/e8b9e4c0-18e8-41d9-97e2-806660d42973/s1200"
}
}
通过实现FlexDecodable协议来定义响应模型
public protocol FlexDecodable {
static var jsonDecoder: JSONDecoder? { get }
static func decodeFrom(_ data: Data) throws -> Self
}
Swift Decodable
协议、UIImage
、String
、Dictionary
和 Array
已被扩展以符合该协议。但是,如果您想更改模型中使用的 jsonDecoder,您可以在模型中实现此属性。或者,您可以定义如下协议
protocol SnakeCaseDecodable: FlexDecodable {}
extension SnakeCaseDecodable {
static var jsonDecoder: JSONDecoder? {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
return decoder
}
}
由于我们的示例是关于图片请求,因此无需做任何操作。
APIBuilder
构建FlexNetService
并处理响应
使用APIBuilder()
.setRequest(ExampleRequest())
.build(for: UIImage.self, orError: FlexNever.self)
.sendRequest()?.onSuccess({ (image) in
print(image)
})
APIBuilder
可以从实现以下协议的对象中构建服务
-
Logger
- 用于记录请求和响应的协议 -
HeadersHandler
- 用于处理响应头部的协议 -
RequestPreparator
- 请求发送前的准备协议 -
NestedModelGetter
- 允许您从响应中获取嵌套数据的协议 -
SuccessResponseChecker
- 定义响应是否成功的协议 -
SSLPinningKeysProvider
- 提供对应特定期宿主进行SSL锚定的密钥的闭包 -
HTTPRequestRepresentable
FlexNetService
支持多个回调
- 当请求成功时(根据您的
SuccessResponseChecker
实现决定),调用onSuccess
- 当请求失败时(根据您的
SuccessResponseChecker
实现决定),调用onFailure
- 当发生客户端错误时,调用
onError
- 无论请求成功或失败,请求完成后调用
onEnd
- 当使用
PagedRequest
时且有页面剩余,调用onLastPage
- 在 POST 请求的进度发生变化时,调用
onProgress