RxNetworkKit
RxNetworkKit 是一个轻量级的 FRP 网络框架。
在苹果的 URLSession 上构建,并使用知名的 RxSwift FRP 库。
为什么选择 RxNetworkKit?
RxNetworkKit 非常适合那些在项目中主要使用 RxSwift 和 RxCocoa 的用户。
它利用了 RxSwift 的特性在请求级别进行操作,以实现对观察到的请求序列及其预期输出的高度专业化。
功能丰富
- 包括下载和上传功能以及进度跟踪,全部都在同一个可观察序列中。酷吧?
- 包括一个请求拦截器协议,可以对其进行实现以进行请求适配和在失败时重试。
- 附带一个可达性类,您可以从任何地方观察其可达性状态。
实践示例
简单API调用
// Create 'Network Manager' instance.
let manager = NetworkManager(configuration: .default, requestInterceptor: self, eventMonitor: self)
// Create request router object.
let router = Router.default
// Make request observable sequence using request router.
let single: Single<Model> = manager.request(router)
// Subscrible to sequence and observe events.
single
.observe(on: MainScheduler.instance)
.subscribe(onSuccess: {
print("Task Response: \($0)")
print("Task Completed!")
}, onFailure: {
print("Task Failure: \($0.localizedDescription)")
}, onDisposed: {
print("Subscription is disposed!")
})
// Dispose subscription by dispose bag.
.disposed(by: disposeBag)
下载请求
// Create 'Network Manager' instance.
let manager = NetworkManager(configuration: .default, requestInterceptor: self, eventMonitor: self)
// Create download request router object.
let router = DownloadRouter.default
// Make download request observable sequence using request router.
let downloadObservable: Observable<DownloadEvent> = manager.download(router)
// Subscrible to sequence and observe events.
downloadObservable
.observe(on: MainScheduler.instance)
.subscribe(onNext: {
switch $0 {
case .progress(let progress):
print("Download Task Progress: \(progress.fractionCompleted*100)%")
case .completedWithData(let data):
print("Download Task Completed with data: \(data).")
default: break
}
}, onError: {
print("Download Task Failure: \($0.localizedDescription)")
}, onCompleted: {
print("Download Task Completed!")
})
// Dispose subscription by dispose bag.
.disposed(by: disposeBag)
上传请求
// Create 'Network Manager' instance.
let manager = NetworkManager(configuration: .default, requestInterceptor: self, eventMonitor: self)
// Create upload request router object.
let router = UploadRouter.default
// Make 'UploadFile' object.
let fileData = Data()
guard let file = UploadFile(forKey: UUID().uuidString, withName: "testFile.txt", withData: fileData) else { return }
// Make upload request observable sequence using request router and uploa file object.
let uploadObservable: Observable<UploadEvent<UploadModel>> = manager.upload(router, file)
// Subscrible to sequence and observe events.
uploadObservable
.observe(on: MainScheduler.instance)
.subscribe(onNext: {
switch $0 {
case .progress(let progress):
print("Upload Task Progress: \(progress.fractionCompleted*100)%")
case .completed(let model):
print("Upload Task Completed with Response: \(model)")
}
}, onError: {
print("Upload Task Failure: \($0.localizedDescription)")
}, onCompleted: {
print("Upload Task Completed!")
})
// Dispose subscription by dispose bag.
.disposed(by: disposeBag)
要求
平台 | 最低Swift版本 | 安装 | 状态 |
---|---|---|---|
iOS 14.0+ / macOS 11.0+ | 5.3 | CocoaPods, Swift Package Manager, 手工 | 全面测试 |
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关用法和安装说明,请访问他们的网站。要使用 CocoaPods 将 RxNetworkKit 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
pod 'RxNetworkKitX'
附言:我们不得不在后缀加上 'X',因为在 trunk 上有一个相同名称但大小写不同的 pod 🤦♂️
Swift 包管理器
Swift 包管理器 是一个用于自动分发 Swift 代码的工具,并且集成到了 swift
编译器。
一旦您设置了 Swift 包,将 RxNetworkKit 添加为依赖就非常简单,只需将它添加到您的 Package.swift
中的 dependencies
值。
dependencies: [
.package(url: "https://github.com/loay-ashraf/RxNetworkKit.git", .upToNextMajor(from: "0.0.1"))
]
Carthage
即将支持 Carthage。
手动
如果您不想使用上述任何依赖项管理器,您可以将RxNetworkKit手动集成到项目中。
嵌入式框架
-
打开终端,
cd
进入您的顶级项目目录,并运行以下命令(如果您的项目尚未初始化为Git仓库):$ git init
-
通过运行以下命令将RxNetworkKit作为Git 子模块添加:
$ git submodule add https://github.com/loay-ashraf/RxNetworkKit.git
-
打开新的
RxNetworkKit
文件夹,并将RxNetworkKit.xcodeproj
拖拽到您的应用程序Xcode项目的Project Navigator中。它应该位于您的应用程序蓝色项目图标下面。它在所有其他Xcode组之上或之下并不重要。
-
在Project Navigator中选择
RxNetworkKit.xcodeproj
,并验证部署目标是否与您的应用程序目标相匹配。 -
然后,在Project Navigator中(蓝色项目图标)选择您的应用程序项目以导航到目标配置窗口,并在侧边栏中选择“Targets”标题下的应用程序目标。
-
在那个窗口的选项卡栏中,打开“General”面板。
-
在“Embedded Binaries”部分下点击
+
按钮。 -
您将看到一个包含一个
RxNetworkKit.xcodeproj
文件夹和一个嵌套的RxNetworkKit.framework
的文件夹。 -
选择
RxNetworkKit.framework
。 -
就这么多!
RxNetworkKit.framework
将自动作为目标依赖项、链接框架和嵌入框架添加到复制文件构建阶段,这是您在模拟器和设备上构建所需的所有内容。
致谢
此项目使用了Smart Retry
操作符,它来自由Alex Grebenyuk编写的Smart Retry博客。