RxNetworkKitX 0.1.0

RxNetworkKitX 0.1.0

Loay Ashraf 维护。



 
依赖项
RxSwift~> 6.6
RxCocoa~> 6.6
RxSwiftExt~> 6.2
 

  • 作者:
  • loay-ashraf

RxNetworkKit

Swift Platforms iOS macOS Cocoapods SPM Twitter LinkedIn

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博客。