1

我想隐藏我的 Realm 实现,而不是继续工作,RLMNotificationBlock我想使用 RXSwift。下面是我的方法现在的样子(RLMNotificationBlock是一个接受 String 和 的块RLMRealm):

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

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

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

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

4

2 回答 2

1

如果我理解正确,你只想返回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操作符

于 2015-12-21T20:01:30.963 回答
1

GitHub 上有一个 Rx Realm 扩展,您可以使用: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)
  }
})

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

于 2017-01-03T11:44:49.933 回答