Krunoslav Zaher

11个库

差异化

UITableView 和 UICollectionView 的差异算法。RxDataSources 由差异化提供动力。

许可: MIT

  • Swift

RxAlamofire

RxSwift 对 Swift Alamofire 优雅的 HTTP 网络的封装

许可: MIT

  • Swift

RxBlocking

一系列用于 RxSwift 的阻塞运算符。这些运算符主要用于单元/集成测试,以及一些其他可能有所用处的特殊情况。

例如:

在退出命令行应用程序之前等待可观察序列完成。

许可: 未声明

  • Swift

RxCocoa

  • UI 扩展
  • NSURL 扩展
  • KVO 扩展

许可: 未声明

  • Swift

RxDataSources

这是一个为 UITableView 和 UICollectionView 提供反应式数据源的集合。

它允许只用几行代码就创建表格和集合视图的动画数据源。

```swift let data: Observable = ...

let dataSource = RxTableViewSectionedAnimatedDataSource() dataSource.cellFactory = { (tv, ip, i) in let cell = tv.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style:.Default, reuseIdentifier: "Cell") cell.textLabel!.text = "(i)" return cell }

// 动画数据 .bind(to: animatedTableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag)

// 正常重新加载数据 .bind(to: tableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag) ```

许可: MIT

  • Swift

RxFeedback

最简单的 RxSwift 架构。状态+反馈循环。

  • 简单
    • 如果系统没有状态 -> 恭喜,你可能有一个纯函数或一个可观察序列
    • 如果系统有状态,那么我们在这里:)
    • 与该状态的交互定义为feedback loop。
    • => 它仅仅是 state + CQRS
  • 简单
    • 如果它是状态 -> State
    • 如果它是修改状态的方法 -> Event/Command
    • 如果它是效果 -> 将它编码到状态的一部分中,然后设计一个 feedback loop
  • 声明式
    • 系统行为是在订阅调用之前声明性指定的,效果在订阅调用后开始 => 编译时证实没有 "未处理的state"。
  • 调试更容易

    • 大量逻辑只是普通的纯函数,可以使用 Xcode 调试器调试或直接打印命令。
  • 可以应用于任何级别

    • 整个系统
    • 应用(状态存储在数据库中,如CoreData、Firebase、Realm)
    • 视图控制器(状态存储在system运算符中)
    • 在反馈循环内(反馈循环中的另一个system运算符)
  • 与依赖注入配合使用真好

  • 测试

    • Reducer 是一个纯函数,只需调用它并断言结果即可
    • 如果正在测试效果 -> TestScheduler
  • 可以模拟循环依赖

  • 完全将业务逻辑与效果(Rx)分开。

    • 业务逻辑可以在平台间转换(ShiftJS、C++、J2ObjC)

许可: MIT

  • Swift

RxRelay

因为观察者设计模式是每个开发人员都应该知道的东西。它促进了对象之间的通信,并简化了应用程序的逻辑。以反应式的方式实现它将把它带到全新的水平。

许可: 未声明

  • Swift

RxSwift

这是 ReactiveX.io 的 Swift 版本 ReactiveX.io

与原始 Rx 一样,它的目的是使异步操作和事件流的组合变得容易。

它尽量移植了原始 Rx 的概念,但为了更愉快和高效的与 iOS/macOS/Linux 环境集成,一些概念被进行了调整。

对于那些从未听说过 Rx 的人来说,最好的类比可能是

git diff | grep bug | less # Linux 管道 - 程序通过发送字节、单词、行序列进行通信 #

许可: 未声明

  • Swift

RxTest

为 RxSwift 设置的单元测试扩展。这个库包含模拟调度器、可观测对象和观察者,这些可以使您轻松地为您操作符编写单元测试,就像您对所有内置的 RxSwift 操作符进行单元测试一样。

本库包含您编写以下方式所需的所有内容:```swift func testMap() { let scheduler = TestScheduler(initialClock: 0)}

let xs = scheduler.createHotObservable([
    next(150, 1),
    next(210, 0),
    next(220, 1),
    next(230, 2),
    next(240, 4),
    completed(300)
    ])

let res = scheduler.start { xs.map { $0 * 2 } }

let correctEvents = [
    next(210, 0 * 2),
    next(220, 1 * 2),
    next(230, 2 * 2),
    next(240, 4 * 2),
    completed(300)
]

let correctSubscriptions = [
    Subscription(200, 300)
]

XCTAssertEqual(res.events, correctEvents)
XCTAssertEqual(xs.subscriptions, correctSubscriptions)

} ```

许可: 未声明

  • Swift

RxTests

为 RxSwift 设置的单元测试扩展。这个库包含模拟调度器、可观测对象和观察者,这些可以使您轻松地为您操作符编写单元测试,就像您对所有内置的 RxSwift 操作符进行单元测试一样。

本库包含您编写以下方式所需的所有内容:```swift func testMap() { let scheduler = TestScheduler(initialClock: 0)}

let xs = scheduler.createHotObservable([
    next(150, 1),
    next(210, 0),
    next(220, 1),
    next(230, 2),
    next(240, 4),
    completed(300)
    ])

let res = scheduler.start { xs.map { $0 * 2 } }

let correctEvents = [
    next(210, 0 * 2),
    next(220, 1 * 2),
    next(230, 2 * 2),
    next(240, 4 * 2),
    completed(300)
]

let correctSubscriptions = [
    Subscription(200, 300)
]

XCTAssertEqual(res.events, correctEvents)
XCTAssertEqual(xs.subscriptions, correctSubscriptions)

} ```

许可证:

  • Swift