认识Leaf
🏵 简介
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 |
📲 安装
手动
将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 {
}