ios - 我如何使用没有类型的 Rx Swift PublishRelay 仅用于 onCompleted() 事件?
问题描述
我的代码中有这个视图模型:
import RxSwift
protocol ViewModelInput {
func buttonTouched()
}
protocol ViewModelOutput {
var done : PublishRelay<Bool> { get set }
}
protocol ViewModelType {
var inputs: ViewModelInput { get }
var outputs: ViewModelOutput { get }
}
public final class ViewModel: ViewModelInput, ViewModelOutput, ViewModelType {
var inputs: ViewModelInput { return self }
var outputs: ViewModelOutput { return self }
internal var done = PublishRelay<Bool>.init()
init() {}
func buttonTouched() {
self.outputs.done.accept(true)
}
}
我正在使用它的“输出”,如下所示:
// Somewhere else in my app
viewModel.outputs.done
.asObservable()
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] _ in
// whatever
}).disposed(by: disposeBag)
老实说,我不需要Boolean
. PublishRelay
我什至不需要onNext()
事件。我只需要通知我的协调员(使用此视图模型的应用程序的一部分)关于onCompleted()
. 但是,我的输出中仍然<Bool>
添加了一些通用类型。我不需要这些。有没有更清洁的方法来实现这一目标?
我虽然关于特征,Completable
但据我所知,我需要在create()
方法或使用中发出完成事件Completable.empty()
。或者也许我不了解那些好的特质,我不知道。
有任何想法吗?
解决方案
我有一段时间没有做过任何 RxSwift 了,但是你有没有尝试过创建 type PublishRelay<Void>
?一旦你这样做了,你就可以在你的方法中传递()
,而不必担心传递不需要的任意信息outputs.done.accept(())
buttonTouched()
推荐阅读
- php - ArgumentCountError:函数 App\Providers\BroadcastServiceProvider::{closure}() 的参数太少,传入 1
- python - 用于计算推荐性能的 NDPM(基于归一化距离 > 性能度量)的 python 函数?
- sql - 将聚合函数中的两个值相除?
- reactjs - 带有 React、Typescript、Babel 和 Webpack 的 IE11 空白页面
- javascript - 对象总是在 forEach 循环中获取最后一个值 - JavaScript
- java - 找不到与包名称“com.example.labbookingsystem”匹配的客户端
- nativescript - nativescript 文档中方法的定义在哪里
- c# - EF Core - EF Core 3.1 或 5 中的 MapToStoredProcedures 替换是什么
- arrays - Swift UI:如何创建 json 文件而不是在网格视图中调用图像?
- php - 我需要 phpmysql 复杂查询的帮助