【发布时间】:2021-10-28 02:56:19
【问题描述】:
我有这个编辑器视图模型,我在其他不同的视图模型中使用它。父视图模型有一个可选择的用户,一旦选择了一个用户,我将需要一个带有新用户的编辑器的新实例。
这是编辑器和父级的简化版本。
class EditorViewModel {
let user: String
let item = PublishSubject<String>()
init(user: String) {
self.user = user
}
}
class ParentViewModel {
var editor: Observable<EditorViewModel>!
let user = BehaviorSubject<String?>(value: nil)
init() {
editor = user.compactMap { $0 }.map { EditorViewModel(user: $0) }
}
}
一旦编辑器保存了一个项目,我希望通过flatMaping 编辑器到它的项目来获得保存的项目。像这样:
let parent = ParentViewModel()
parent.editor.flatMapLatest { $0.item }.debug("item").subscribe(onNext: { item in
print("This doesn't print")
})
parent.editor.subscribe(onNext: { editor in
print("This one prints")
editor.item.onNext("something")
})
parent.user.onNext("1")
flatMap 行确实订阅了,但它从来没有得到一个项目。
这是在操场上运行上述代码的输出:
2021-10-28 13:47:41.528: item -> subscribed
This one prints
另外,如果您认为这种设置过于疯狂,我同意并愿意接受建议。
【问题讨论】:
标签: reactive-programming rx-swift