• 文档更新日志
    • 18年2月15日
  • 示例
  • 必备条件
  • 安装
    • 手动
    • CocoaPods
    • Carthage
    • Swift Package Manager
    • 使用 submodules 手动集成

    RxSwift 中文文档 - 图1

    RxSwift: ReactiveX for Swift

    Travis CI platforms pod Carthage compatible Swift Package Manager compatible QQ Group epub

    ReactiveX(简写: Rx) 是一个可以帮助我们简化异步编程的框架。

    它拓展了观察者模式。使你能够自由组合多个异步事件,而不需要去关心线程,同步,线程安全,并发数据以及I/O阻塞。

    RxSwift 是 Rx 的 Swift 版本。

    它尝试将原有的一些概念移植到 iOS/macOS 平台。

    你可以在这里找到跨平台文档 ReactiveX.io。


    RxSwift QQ 交流群: 424180219


    文档更新日志

    18年2月15日

    • 纠正错别字
    • 给 retry 操作符加入演示代码
    • 给 replay 操作符加入演示代码
    • 给 connect 操作符加入演示代码
    • 给 publish 操作符加入演示代码
    • 给 reduce 操作符加入演示代码
    • 给 skipUntil 操作符加入演示代码
    • 给 skipWhile 操作符加入演示代码
    • 给 skip 操作符加入演示代码

      … 点击查看更多


    示例

    Github 搜索…

    RxSwift 中文文档 - 图9

    定义搜索结果 …

    1. let searchResults = searchBar.rx.text.orEmpty
    2. .throttle(0.3, scheduler: MainScheduler.instance)
    3. .distinctUntilChanged()
    4. .flatMapLatest { query -> Observable<[Repository]> in
    5. if query.isEmpty {
    6. return .just([])
    7. }
    8. return searchGitHub(query)
    9. .catchErrorJustReturn([])
    10. }
    11. .observeOn(MainScheduler.instance)

    … 然后将结果绑定到 tableview 上

    1. searchResults
    2. .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
    3. (index, repository: Repository, cell) in
    4. cell.textLabel?.text = repository.name
    5. cell.detailTextLabel?.text = repository.url
    6. }
    7. .disposed(by: disposeBag)

    必备条件

    • Xcode 9.0
    • Swift 4.0
    • Swift 3.x (使用 rxswift-3.0 分支)
    • Swift 2.3 (使用 rxswift-2.0 分支)

    安装

    安装 RxSwift 不需要任何第三方依赖。

    以下是当前支持的安装方法:

    手动

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

    CocoaPods

    pod --version: 1.3.1 已通过测试

    1. # Podfile
    2. use_frameworks!
    3. target 'YOUR_TARGET_NAME' do
    4. pod 'RxSwift', '~> 4.0'
    5. pod 'RxCocoa', '~> 4.0'
    6. end
    7. # RxTests 和 RxBlocking 将在单元/集成测试中起到重要作用
    8. target 'YOUR_TESTING_TARGET' do
    9. pod 'RxBlocking', '~> 4.0'
    10. pod 'RxTest', '~> 4.0'
    11. end

    替换 YOUR_TARGET_NAME 然后在 Podfile 目录下, 终端输入:

    1. $ pod install

    Carthage

    carthage version: 0.26.2 已通过测试

    添加到 Cartfile

    1. github "ReactiveX/RxSwift" ~> 4.0
    1. $ carthage update

    Swift Package Manager

    swift build --version: Swift 4.0.0-dev (swiftpm-13126) 已通过测试

    创建Package.swift 文件。

    1. // swift-tools-version:4.0
    2. import PackageDescription
    3. let package = Package(
    4. name: "RxTestProject",
    5. dependencies: [
    6. .package(url: "https://github.com/ReactiveX/RxSwift.git", "4.0.0" ..< "5.0.0")
    7. ],
    8. targets: [
    9. .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
    10. ]
    11. )
    1. $ swift build

    如果构建或测试一个模块对 RxTest 存在依赖, 设置 TEST=1. (RxSwift >= 3.4.2)

    1. $ TEST=1 swift test

    使用 submodules 手动集成

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