【发布时间】:2018-03-08 22:09:08
【问题描述】:
我有一个从flatMap创建的对象,它是一个可观察对象。
private lazy var childObj: chilView? = {
let keychainStore = Realm().getStore()
let selectedElementID = keychainStore.elementID
.asObservable()
.distinctUntilChanged {$0 == $1}
.flatMap({ (elementID) -> Observable<Element?> in
guard let elementID = elementID else {
return Observable.error(Errors.InvalidElementID)
}
return Observable.create { observer in
let elementStream: Observable<Result<Element>> = keychainStore.getObservable(id: elementID)
elementStream.subscribe(onNext: { (result) in
switch result {
case .success(let element):
observer.onNext(element)
default: break
}
})
.disposed(by: self.disposeBag)
return Disposables.create()
}
})
return self.createChildObject(with: selectedElementID)
}()
selectedElement 是可观察的 flatMap 类型。 createChildObject(with:) 甚至在 observer.onNext(element) 执行之前就被调用了。我该如何解决这个问题?
【问题讨论】:
-
不确定
elementID是什么类型的对象,但如果你能做到{ $0 == $1 },它符合Equatable,这意味着你可以只写.distinctUntilChanged()并省略相等闭包。跨度>
标签: ios swift observable rx-swift