FlexyNetwork 0.1.10

FlexyNetwork 0.1.10

Isa Aliev 维护。



  • IsaAliev

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 协议、UIImageStringDictionaryArray 已被扩展以符合该协议。但是,如果您想更改模型中使用的 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