LiteNetwork
LiteNetwork 是一个基于 Swift 编写的轻量级且功能强大的网络请求框架。
概述
LiteNetwork 是一个基于 Apple 内置的 URLSession
API 的轻量级网络请求框架。它使用链式 sourceBag 管理系统来确保多个任务的有序执行,这意味着您可以使用方法链来调用多个请求,并且请求将以调用的顺序发送。您可轻松快速地更改配置信息,创建和更新任务,并通过框架接口进行统一管理,而不必关心底层方法。该框架支持创建和配置五个任务:数据、下载、上传文件、上传数据和上传流。并提供了一系列自定义接口。
特性
- 便于处理 URLSessionConfiguration 及其更新
- 支持数据、下载、上传和流任务的自定义处理
- 避免不便利的嵌套回调
- 多任务异步操作
- 统一任务管理
- 自动无效化会话
要求
- iOS 13.0+ / macOS 10.12+
- Swift 5.2+
安装
Swift包
通过以下步骤将开源包导入到您的项目中
Xcode
->文件
->Swift包
->添加包依赖
- 搜索
https://github.com/lmyl/LiteNetwork
并将其添加到您的目标中
使用方法
处理流任务
- 使用
makeStreamWith()
方法初始化配置信息并创建流任务
// the default initialize create Default type of session
let token = LiteNetworkStream().makeStreamWith(host: "local", port: 9898)
- 在此处进行一些自定义更改
let token = LiteNetworkStream().makeStreamWith(host: "local", port: 9898)
.setEphemeralConfigureType() // Change Default to Ephemeral
.updateStreamReadCloseComplete {
print("Read closed")
}
- 调用
startConnect()
或startSecureConnect()
来恢复任务
let token = LiteNetworkStream().makeStreamWith(host: "local", port: 9898)
.setEphemeralConfigureType()
.updateStreamReadCloseComplete {
print("Read closed")
}
.startConnect()
- 连接到服务器并处理您的操作。 当有多个任务时,它们将异步和顺序执行。
let input = "hello world!"
token.readData(minLength: 1, maxLength: 1000, timeout: 30) { dataOrNil, eof, errorOrNil in
if let error = errorOrNil {
print("Error: " + error.localizedDescription)
}
if let data = dataOrNil {
print(String.init(data: data, encoding: .utf8)!)
}
print("EOF: \(eof)")
// return Bool to indicate whether current session will be invalidated
return false
}
// You can create multiple tasks in a row, just like this:
token.writeData(input: input.data(using: .utf8)!, timeout: 30, completionHandler: {
errorOrNil in
if let error = errorOrNil {
print("Error: " + error.localizedDescription)
} else {
print("Complete")
}
return false
})
token.simpleCommunicateWithSever(input: input.data(using: .utf8)!) { dataOrNil, errorOrNil in
if let data = dataOrNil {
print(String.init(data: data, encoding: .utf8)!)
}
if let error = errorOrNil {
print("Error: " + error.localizedDescription)
}
return false
}
- 注意以下情况
- 您手动关闭读/写流
- 一个操作(
writeData()
、readData()
或simpleCommunicateWithSever()
)发生错误
- 一个操作(
writeData()
、readData()
或simpleCommunicateWithSever()
)在完成处理程序中返回true
则会话将调用 invalidateAndCancel()
并自动使其无效,其余操作不会执行。
// manual operations:
token.closeWriteStream()
token.closeReadStream()
// or
token.cancelSessionFinishCurrentTask()
// or
token.cancelSessionRightWay()
处理上传/下载任务
基本步骤与上述步骤相似。请注意,您需要调用 fire()
来恢复所有任务,而不是 startConnect()
。
- 初始化并创建您的任务
let token2 = LiteNetwork().makeDataRequest(for: {
URLRequest(url: URL(string: "https://www.baidu.com")!)
})
- 进行一些自定义更改
let token2 = LiteNetwork().makeDataRequest(for: {
URLRequest(url: URL(string: "https://www.baidu.com")!)
})
.setRequestCachePolicy(for: .reloadIgnoringCacheData)
- 处理从服务器接收到的数据(或其他类型的数据)
.processData(for: {
response, dataOrNil in
if let data = dataOrNil, let string = String(data: data, encoding: .utf8) {
print(string)
}
})
- 使用
fire()
恢复所有任务。您可以连续创建多个任务,如下面的代码所示
let token2 = LiteNetwork()
// first task
.makeDataRequest(for: {
URLRequest(url: URL(string: "https://www.baidu.com")!)
}).setRequestCachePolicy(for: .reloadIgnoringCacheData).processData(for: {
response, dataOrNil in
if let data = dataOrNil, let string = String(data: data, encoding: .utf8) {
print(string)
}
})
// second task
.makeDataRequest(for: {
return URLRequest(url: URL(string: "https://www.apple.com/cn/")!)
}).processData(for: {
response, dataOrNil in
if let data = dataOrNil, let string = String(data: data, encoding: .utf8) {
print(string)
}
}).processGlobeFailure(for: {
print("Error:" + $0.localizedDescription)
})
// resume all
.fire()
- 您可以使用下面提供的方法在不同时间无效化您的会话 (随时无效化)。如果您没有手动调用无效化方法,框架默认在所有任务完成后无效化会话。
token2.cancelSessionFinishCurrentTask()
// or
token2.cancelSessionRightWay()
有关更多用法,请阅读 LiteNetwork.swift
和 LiteNetworkStream.swift
。
联系
GitHub issue 跟踪器: issue tracker(在此处报告错误)
Google 邮箱: [email protected]
或 [email protected]
(如果您有任何疑问或建议,请联系我们)