RX 块的领域通知

Realm notification to RX block

我想隐藏我的 Realm 实现,而不是处理 RLMNotificationBlock 我想使用 RXSwift。下面是我的方法现在的样子(RLMNotificationBlock 是一个接受字符串和 RLMRealm 的块):

func addNotificationBlock(block: RLMNotificationBlock) -> RLMNotificationToken? {
    let rlmObject = ...
    return rlmObject.addNotificationBlock(block)
}

但我想切换到更具反应性的观察者模式方式。我查看了 rx_clickedButtonAtIndex 的 RxSwift 文档和源代码,但我不知道应该如何将所有这些东西放在一起。我想我最后的代码看起来像:

public var rx_realmContentChanged: ControlEvent<Int> {
    let controlEvent = ControlEvent()
    // My code go here
    return controlEvent
}

我是 RXSwift 的新手,只知道基础知识。任何帮助将不胜感激。

如果我没理解错的话,你只是想 return Observable<RLMNotificationToken> 在这种情况下你只需要做这样的事情

func addNotificationBlock(block: RLMNotificationBlock) -> Observable<RLMNotificationToken> {
    return create { observer -> Disposable in
        let rlmObject = ...
        let token = rlmObject.addNotificationBlock(block)

        // Some condition
        observer.onNext(token)
        // Some other condition
        observer.onError(NSError(domain: "My domain", code: -1, userInfo: nil))

        return AnonymousDisposable {
            // Dispose resources here
        }
        // If you have nothing to dipose return `NopDisposable.instance`
    }
}

为了使用它绑定到按钮 rx_tap 或其他使用 flatMap 运算符

GitHub 上有可用的 Rx 领域扩展,您可以使用:https://github.com/RxSwiftCommunity/RxRealm

它允许您从单个 Realm 对象或 Realm Collection 中获取 Observable。这是自述文件中的示例:

let realm = try! Realm()
let laps = realm.objects(Lap.self))

Observable.changesetFrom(laps)
  .subscribe(onNext: { results, changes in
    if let changes = changes {
    // it's an update
    print(results)
    print("deleted: \(changes.deleted) inserted: \(changes.inserted) updated: \(changes.updated)")
  } else {
    // it's the initial data
    print(results)
  }
})

还有一个额外的库,专门用于绑定 table 和名为 RxRealmDataSources 的集合视图