Netable 0.10.3

Netable 0.10.3

Brendan LensinkNigel Brooke 维护。



Netable 0.10.3

  • Brendan Lensink

Swift Package Manager compatiblePRs WelcomeLicense: MITCocoaPods Compatible Platform

现代应用程序与许多不同的 API 交互。Netable 通过提供使用这些 API 来驱动高质量的 iOS 和 MacOS 应用程序的简单接口,并基于 Swift Codable,从而在需要时仍支持非标准和非常规 API,使其变得更加容易。

特性

Netable 的核心哲学是确保开发者可以为简单的 API 编写简单的代码,同时提供各种选项来处理奇特或非标准的 API。

  1. 每个请求都是一个独立类型
    1. 便于将请求拆分为单独的文件,避免单一的联网类
  2. 基于 CodableResult 返回类型
    1. 便于模型层和控制器层之间的交互
    2. 减少对包装类型的需求
  3. 可自动将请求响应转换为可使用对象
  4. 易于与现有日志库集成,或默认使用 debugPrint 进行记录
  5. 全面的错误类型使处理预期和非预期错误变得轻松愉快

用法

标准用法

创建一个新的 Netable 实例,并传入您的基本网址

let netable = Netable(baseURL: URL(string: "https://api.thecatapi.com/v1/")!)

扩展 Request

struct CatImage: Decodable {
    let id: String
    let url: String
}

struct GetCatImages: Request {
    typealias Parameters = [String: String]
    typealias RawResource = [CatImage]

    public var method: HTTPMethod { return .get }

    public var path: String {
        return "images/search"
    }

    public var parameters: [String: String] {
        return ["mime_type": "jpg,png", "limit": "2"]
    }
}

发出您的请求并处理结果

netable.request(GetCatImages()) { result in
    switch result {
    case .success(let catImages):
        if let firstCat = catImages.first,
           let url = URL(string: firstCat.url),
           let imageData = try? Data(contentsOf: url) {
            self.catsImageView1.image = UIImage(data: imageData)
        }

        if let lastCat = catImages.last,
           let url = URL(string: lastCat.url),
           let imageData = try? Data(contentsOf: url) {
            self.catsImageView2.image = UIImage(data: imageData)
        }
    case .failure(let error):
        let alert = UIAlertController(
            title: "Uh oh!",
            message: "Get cats request failed with error: \(error)",
            preferredStyle: .alert
        )

        alert.addAction(UIAlertAction(title: "OK", style: .cancel))
        self.present(alert, animated: true, completion: nil)
    }
}

资源提取

让您的请求对象处理从原始资源提取可用的对象

struct CatImage: Decodable {
    let id: String
    let url: String
}

struct GetCatImageURL: Request {
    typealias Parameters = [String: String]
    typealias RawResource = [CatImage]
    typealias FinalResource = URL

     // ...

    func finalize(raw: RawResource) -> Result<FinalResource, NetableError> {
        guard let catImage = raw.first else {
            return .failure(NetableError.resourceExtractionError("The CatImage array is empty"))
        }

        guard let url = URL(string: catImage.url) else {
            return .failure(NetableError.resourceExtractionError("Could not build URL from CatImage url string"))
        }

        return .success(url)
    }
}

让您的网络代码处理重要的事情

netable.request(GetCatImageURL()) { result in
    switch result {
    case .success(let catUrl):
        guard let imageData = try? Data(contentsOf: catUrl) else {
            return
        }

        self.imageView.image = UIImage(data: imageData)
    case .failure(let error):
        // ...
    }
}

完整文档

通过Jazzy和GitHub Pages提供深入文档。

示例

要运行示例项目,首先克隆仓库,然后在示例目录下运行pod install

要求

  • iOS 10.0+
  • MacOS 10.15+
  • Xcode 11.0+

安装

Netable可以通过Swift包管理器获取。安装步骤如下:

  1. 在Xcode中,单击文件,然后选择Swift包管理器,接着选择添加包依赖
  2. 选择你的项目
  3. 在搜索栏中输入此URL: https://github.com/steamclock/netable.git

Netable同样可以通过CocoaPods获取。安装方法如下,只需在你的Podfile中添加以下行:

pod 'Netable'

然后运行pod install

许可

Netable受MIT许可证管理。有关更多详情,请查看License.md