【发布时间】:2025-11-24 18:35:01
【问题描述】:
我想知道向我创建的 observable 的观察者“转发”(如果这是术语)一个 observable 的正确方法是什么。
下面是一个例子。
我的函数 performSomeActionAfterConfirmation 显示一个 UIAlertController 并返回一个新的 observable。如果在警报控制器中选择“是”,我将“转发”otherObservable() 给创建的 observable 的观察者。如果选择“否”,我只是完成 observable。
我想我的代码会起作用,因为我在 RxJava 中做过类似的事情,但在这种情况下,我在 self?.otherObservable().subscribe(observer) 收到警告说“未使用 'subscribe' 调用的结果”。
我想我必须将它分配给 DisposeBag,但我不知道如何,因为该包由 performSomeActionAfterConfirmation 的调用者管理。也许我应该将它作为参数传递给函数?
func performSomeActionAfterConfirmation() -> Observable<String> {
return Observable<String>.create { [weak self] observer in
let alertCtrl = UIAlertController(title: "perform action", message: "do it?", preferredStyle: .alert)
// yes -> forward another observable
alertCtrl.addAction(UIAlertAction(title: "yes", style: .default, handler: { _ in
self?.otherObservable().subscribe(observer) // Result call is unused
}))
// no -> just complete this observable
alertCtrl.addAction(UIAlertAction(title: "no", style: .default, handler: { _ in
observer.onCompleted()
}))
self?.host?.present(alertCtrl, animated: true)
return Disposables.create()
}
}
func otherObservable() -> Observable<String> {
return Observable.empty() // dummy code
}
【问题讨论】: