NetworkSwift
NetworkSwift 是一个轻量级且动态的网络库,旨在实现通用性,支持多种会话类型,包括 URLSession。该库遵循定义的合同,实现了三个核心功能
- HTTPS 请求:便于发出安全的 HTTP 请求。
- 上传文件:支持上传文件。
- 下载文件:允许下载文件。
NetworkSwift 提供了两种不同的请求执行方法
-
完成请求:使用完成处理程序来处理响应。
-
Async Await 请求(iOS 15 及以上):支持通过 Swift 的 async/await 机制进行异步编程。
此外,NetworkSwift 包含一个名为 NetworkSwift/Queue 的子模块。此子模块专门设计用于处理请求凭据过期时的自动重新认证。
为了提高可测试性,NetworkSwift 提供了模拟实现,使开发者能够有效地编写单元测试。
集成
通过 CocoaPods 集成
CocoaPods 是用于 Swift 项目的依赖管理器,使集成更为简单。
-
如果您还没有安装 CocoaPods,可以通过在终端执行以下行来安装:
sudo gem install cocoapods
-
如果您没有 Podfile 文件,请在 Xcode 项目目录中创建一个名为 Podfile 的纯文本文件,并添加以下内容,确保设置的平台和版本与您的应用程序相匹配。
2.1 应用程序
pod 'NetworkSwift/Core'
pod 'NetworkSwift/Queue'
2.2 测试
pod 'NetworkSwift/CoreMocks'
pod 'NetworkSwift/QueueMocks'
-
在 Xcode 项目目录中执行以下命令以安装 NetworkSwift。
pod install
-
现在,打开您的项目工作空间,检查 NetworkSwift 是否已正确添加。
如何使用
1. 发送带完成的请求
let credentialContainer = ClientCredentialContainer()
let service = NetworkKitImpWrapper(baseURL: baseURL, credentialContainer: credentialContainer)
let request = NetworkRequestImp<[User]>(path: "/users", method: .GET)
service.request(request) { result in
self.handleResult(result)
}
2. iOS-15及以上使用 async/await 发送请求
do {
let credentialContainer = ClientCredentialContainer()
let service = NetworkKitImpWrapper(baseURL: baseURL, credentialContainer: credentialContainer)
let request = NetworkRequestImp<User>(path: "/users/6", method: .DELETE)
let result: NetworkRequestImp<User>.SuccessType = try await service.request(request)
debugPrint("Request success: \(result)")
} catch {
debugPrint((error as? NetworkError)?.localizedDescription ?? error.localizedDescription)
}
3. 使用队列和重新认证发送请求
let credentialContainer = ClientCredentialContainer()
let reAuthService = ClientReAuthenticationService(credentialContainer: credentialContainer)
let networkKitQueue = NetworkKitQueueImp(baseURL: baseURL,
credentialContainer: credentialContainer,
reAuthService: reAuthService)
let request = NetworkRequestImp<User>(path: "/users/1", method: .PUT)
networkKitQueue.request(request) { result in
self.handleResult(result)
}
4. 下载文件
let downloadDelegate = ClientDownloadDelegate()
let session = URLSession(configuration: .default, delegate: downloadDelegate, delegateQueue: nil)
let downloadService = NetworkKitImpWrapper(baseURL: baseURL, session: session)
let request = NetworkRequestImp<User>(path: "/users/2", method: .POST)
downloadService.downloadFile(request) { result in
self.handleResult(result)
}
5. 上传文件
let uploadDelegate = ClientUploadDelegate()
let session = URLSession(configuration: .default, delegate: uploadDelegate, delegateQueue: nil)
let uploadService = NetworkKitImpWrapper(baseURL: baseURL, session: session)
let request = NetworkRequestImp<User>(path: "/users/2", method: .POST)
uploadService.uploadFile(request, fromFile: URL(fileURLWithPath: "")) { result in
self.handleResult(result)
}
6. 模拟支持单元测试
let successResult = NetworkKitResultMock.requestSuccess(
NetworkResponseMock(statusCode: 200, response: [User(id: "1", name: "Hoang")])
)
let session = NetworkSessionMock<User>(expected: successResult)
let service = NetworkKitImpWrapper<NetworkSessionMock>(baseURL: baseURL, session: session)
let request = NetworkRequestImp<[User]>(path: "/users", method: .GET)
service.request(request) { result in
self.handleResult(result)
}
7. 处理结果
private func handleResult<T>(
_ result: Result<T, NetworkError>
) {
switch result {
case let .success(model): debugPrint("Request success: \(model)")
case let .failure(error): debugPrint(error.localizedDescription)
}
}
完成啦!!NetworkSwift 已经成功集成并初始化到项目中,并可使用。
更多详情请访问 示例项目。
支持
请随意使用 mockapi.io 在 Networkit 示例中进行 API 测试。如果在 NetworkSwift 遇到任何问题或需要帮助进行集成,请通过 [email protected] 联系我。我在这里支持你。