我试图实现的是在viewModel中拥有一个可变数组,控制器也可以观察到该数组,并在其值更改时重新加载tableView。我尝试使用BehaviorRelay
,但看起来它是不可变的。我不能在它的值中删除和插入数据。我写的最好的东西是这个自定义的ObservableObject类:
final class CustomObservableObject<T> {
var value: T {
didSet {
listener?(value)
}
}
init(value: T) {
self.value = value
}
var listener: ((T) -> Void)?
func bind(listener: @escaping ((T) -> Void)) {
self.listener = listener
}
}
这正是我想要的。像这个类一样,在Combine或RxSwift框架中有什么可以使用的吗?
提前感谢
BehaviorRelay是为存储状态并允许您强制更新状态而构建的,这正是您所要求的。
BehaviorRelay类型是BehaviorSubject类型的包装器,它提供了一个不同的接口,不允许内部主题发出错误或已完成的事件。BehaviorSubject中包含的元素是可变的。然而,为了对其进行变异,您必须首先用value
将其提取到var
中,然后用accept(_:)
将更新后的值推回。这将有助于确保没有遗漏任何突变,并允许您将多个突变批量添加到一个更新中。你写的课上缺了这些东西。
请永远记住:
受试者[和中继]提供了一种方便的方式来浏览处方,但不建议日常使用。--Rx 简介
随着你对被动范式的了解越来越多,你会发现自己很少使用这种特定的拐杖。