Leaf 1.3.0

Leaf 1.3.0

Meniny维护。



Leaf 1.3.0

认识Leaf

Leaf

Author EMail MIT
Version Platforms Swift
Build Passing Cocoapods Carthage SPM

🏵简介

Leaf是一个多功能的Swift编写的HTTP(s)网络框架。

🌟特性

  • ✓ 链式请求/响应方法

  • ✓ 异步和同步任务执行

  • ✓ 基本认证、Bearer认证和自定义认证处理

  • URL / JSON / 属性列表参数编码

  • ✓ 上传文件/ Data / Stream / 表单数据

  • ✓ 使用请求/断点续传来下载文件

  • ✓ 使用URLCredential进行认证

  • ✓ 自定义缓存控制

  • ✓ 自定义内容类型

  • ✓ 上传/下载进度闭包

  • cURL命令调试输出

  • ✓ 请求/响应拦截器

  • ✓ 推断响应对象类型

  • ✓ 网络可达性

  • TLS证书公钥锁定

  • ✓ 重试请求

  • ✓ 兼容Codable协议(JSON / 属性列表)

  • ✓ 支持watchOS

  • ✓ 支持tvOS

  • ✓ 支持macOS

📋要求

类型 需求

平台

iOS

8.0

macOS

10.9

tvOS

9.0

watchOS

2.0

Linux

N/A

IDE

Xcode

10.2

语言

Swift

5

📲安装

CocoaPods

Leaf可在CocoaPods上使用。

use_frameworks!
pod 'Leaf'

手动

Leaf目录中的所有文件复制到您的项目中。

🛌依赖

N/A

❤️贡献

欢迎fork并将pull requests提交。

🔖许可证

Leaf 是一个开源软件,遵循 MIT 许可协议。

🔫使用方法

import Leaf

do {
    let url = URL(string: "https://domain.com/someapi")!
    try Leaf.init(u, parameters: ["lan": "en-US"]).async(.GET, progress: { (progress) in
        // ...
    }, success: { (response) in
        // ...
    }, failure: { (error) in
        // ...
    })
} catch {
    // ...
}

⚙️高级功能

构建 LeafRequest

import Leaf

do {
    let request = try LeafRequest.builder("https://domain.com/someapi")!
                .setAccept(.json)
                .setCache(.reloadIgnoringLocalCacheData)
                .setMethod(.PATCH)
                .setTimeout(20)
                .setJSONBody(["foo", "bar"])
                .setContentType(.json)
                .setServiceType(.background)
                .setCacheControls([.maxAge(500)])
                .setURLParameters(["foo": "bar"])
                .setAcceptEncodings([.gzip, .deflate])
                .setBasicAuthorization(user: "user", password: "password")
                .setHeaders(["foo": "bar"])
                .build()
} catch {

}

异步请求

import Leaf

let Leaf = LeafURLSession()

Leaf.dataTask(URL(string: "https://domain.com/someapi")!).async(success: { (response) in

}, failure: { (error) in

})

同步请求

import Leaf

let Leaf = LeafURLSession()

do {
    let object: [AnyHashable: Any] = try Leaf.dataTask("https://domain.com/someapi").sync().object()
} catch {

}

从缓存请求

import Leaf

let Leaf = LeafURLSession()

do {
    let object: [AnyHashable: Any] = try Leaf.dataTask("https://domain.com/someapi").cached().object()

} catch {

}

跟踪进度

import Leaf

let Leaf = LeafURLSession()

do {
    let task = try Leaf.dataTask("https://domain.com/someapi").progress({ progress in
    }).sync()
} catch {

}

为所有请求添加拦截器

import Leaf

let Leaf = LeafURLSession()

Leaf.addRequestInterceptor { request in
    request.addHeader("foo", value: "bar")
    request.setBearerAuthorization(token: "token")
    return request
}

请求重试

import Leaf

let Leaf = LeafURLSession()

Leaf.retryClosure = { response, _, _ in response?.statusCode == XXX }

do {
    let task = try Leaf.dataTask("https://domain.com/someapi").retry({ response, error, retryCount in
        return retryCount < 2
    }).sync()
} catch {

}

🧙‍♂️ 可编码

可编码

import Leaf

let request = LeafRequest.builder("https://domain.com/someapi")!
            .setJSONObject(Encodable())
            .build()

可解码

import Leaf

let Leaf = URLSession()

do {
    let object: Decodable = try Leaf.dataTask("https://domain.com/someapi").sync().decode()

} catch {

}