美文网首页
RxSwift文档一(简介)

RxSwift文档一(简介)

作者: 酒茶白开水 | 来源:发表于2020-07-13 10:43 被阅读0次

    代码下载

    简介

    Rx是通过接口(Observable<Element>)表示的通用抽象的计算。

    RxSwift是Rx的Swift版本。

    它试图尽可能多地从原始版本移植概念,但是为了更好地与iOS/macOS环境集成,对一些概念进行了调整。

    可以在ReactiveX.io上找到跨平台的文档。

    与原始Rx一样,它的目的是使异步操作、事件和数据流易于组合。

    KVO观察、异步操作和流都在序列(sequence)的抽象下统一。这就是Rx如此简单、优雅和强大的原因。

    结构

    RxSwift包含五个独立的组件,具体如下:

    ┌──────────────┐    ┌──────────────┐
    │   RxCocoa    ├────▶   RxRelay    │
    └───────┬──────┘    └──────┬───────┘
            │                  │        
    ┌───────▼──────────────────▼───────┐
    │             RxSwift              │
    └───────▲──────────────────▲───────┘
            │                  │        
    ┌───────┴──────┐    ┌──────┴───────┐
    │    RxTest    │    │  RxBlocking  │
    └──────────────┘    └──────────────┘
    
    • RxSwift:RxSwift的核心,提供Rx标准(主要)由ReactiveX定义。它没有其他依赖项。
    • RxCocoa:为iOS/macOS/watchOS和tvOS应用程序开发提供特定Cocoa功能,例如Binders,Traits 等等。它依赖于RxSwift和RxRelay。
    • RxRelay:提供PublishRelay和BehaviorRelay这两个围绕Subjects的简单包装器。它依赖于RxSwift。
    • RxTest和RxBlocking:为基于Rx的系统提供测试功能。它依赖于RxSwift。

    用法

    <table>
    <tr>
    <th width="30%">这是一个例子</th>
    <th width="30%">效果</th>
    </tr>
    <tr>
    <td>定义从GitHub仓库的搜索……</td>
    <th rowspan="9"><img src="https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/GithubSearch.gif"></th>
    </tr>
    <tr>
    <td><div class="highlight highlight-source-swift"><pre>
    let searchResults = searchBar.rx.text.orEmpty
    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)
    .distinctUntilChanged()
    .flatMapLatest { query -> Observable<[Repository]> in
    if query.isEmpty {
    return .just([])
    }
    return searchGitHub(query)
    .catchErrorJustReturn([])
    }
    .observeOn(MainScheduler.instance)</pre></div></td>
    </tr>
    <tr>
    <td>……然后绑定结果到tableview</td>
    </tr>
    <tr>
    <td width="30%"><div class="highlight highlight-source-swift"><pre>
    searchResults
    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
    (index, repository: Repository, cell) in
    cell.textLabel?.text = repository.name
    cell.detailTextLabel?.text = repository.url
    }
    .disposed(by: disposeBag)</pre></div></td>
    </tr>
    </table>

    安装

    RxSwift不包含任何外部依赖项。

    这些是目前支持的安装方式:

    手动安装

    打开 Rx.xcworkspace, 选中 RxExample 并且点击运行。 此方法将构建所有内容并运行示例应用程序。

    CocoaPods

    # Podfile
    use_frameworks!
    
    target 'YOUR_TARGET_NAME' do
        pod 'RxSwift', '~> 5'
        pod 'RxCocoa', '~> 5'
    end
    
    # RxTest and RxBlocking make the most sense in the context of unit/integration tests
    target 'YOUR_TESTING_TARGET' do
        pod 'RxBlocking', '~> 5'
        pod 'RxTest', '~> 5'
    end
    

    替换YOUR_TARGET_NAME然后在Podfile目录中键入:

    $ pod install
    

    Carthage

    官方支持Carthage 0.33及以上版本。

    添加到 Cartfile

    github "ReactiveX/RxSwift" ~> 5.0
    
    $ carthage update
    

    Carthage作为静态库。

    Carthage默认将RxSwift构建为动态库。

    如果希望使用Carthage将RxSwift构建为静态库,在使用Carthage构建之前,可以使用以下脚本手动修改框架类型:

    carthage update RxSwift --platform iOS --no-build
    sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj
    carthage build RxAlamofire --platform iOS
    

    Swift Package Manager

    创建Package.swift 文件。

    // swift-tools-version:5.0
    
    import PackageDescription
    
    let package = Package(
      name: "RxTestProject",
      dependencies: [
        .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "5.0.0")
      ],
      targets: [
        .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
      ]
    )
    
    $ swift build
    

    要构建或测试的一个模块对RxTest存在依赖,设置 TEST=1.

    $ TEST=1 swift test
    

    使用git submodules手工集成

    • 将RxSwift作为子模块添加
    $ git submodule add git@github.com:ReactiveX/RxSwift.git
    
    • 拖拽Rx.xcodeproj到项目中
    • 前往 Project > Targets > Build Phases > Link Binary With Libraries, 点击 + 并且选中 RxSwift-[Platform] 和 RxCocoa-[Platform]

    相关文章

      网友评论

          本文标题:RxSwift文档一(简介)

          本文链接:https://www.haomeiwen.com/subject/aafacktx.html