RxSwift - 自定义 class 作为可观察的
RxSwift - Custom class as observable
我正在创建一个自定义的通用 TableView 模型来使用 MVVM 和 RxSwift。我知道 RxTableViewSectionedReloadDataSource
class 但现在不愿意在我的项目中使用它。
模型已创建并正在运行
typealias TableViewModel = TableModel<CellDescriptor>
class TableModel<T> {
var sections = [SectionModel<T>]()
func add(item: SectionModel<T>) {
sections.append(item)
}
// More funcs there...
}
我在我的 ViewModel 中创建了一个实例:
var tableViewModel = Variable<TableViewModel>(TableViewModel())
然后在我的 viewController
中收听事件
viewModel.tableViewModel.asObservable().subscribe({ [weak self] value in
self?.tableView.reloadData()
}).addDisposableTo(dispose)
这里有几个问题(我对 FRP 还很陌生)
:
我如何 "emit" 一个事件来触发我的自定义 class 中的 viewController 订阅?
我知道一个解决方案是将我的 sections 数组创建为 RxSwift Variable()
然后直接收听它,但想知道是否有办法使 class (或结构)本身可观察。
有没有更好的方法来解决这个问题?我浏览了 RxSwift 游乐场和示例项目,但听起来有上千种方法可以做同样的事情。也许 Observable
不是我想要的。 :)
不要将视图模型本身设为 Observable
。这是不必要的复杂性,而且不直观。如果你真的想,那么看看 Variable
是如何实现的,这应该会让你知道如何去做。
相反,只需使用主题(例如 Variable
)来保存视图模型中的数据。
我正在创建一个自定义的通用 TableView 模型来使用 MVVM 和 RxSwift。我知道 RxTableViewSectionedReloadDataSource
class 但现在不愿意在我的项目中使用它。
模型已创建并正在运行
typealias TableViewModel = TableModel<CellDescriptor>
class TableModel<T> {
var sections = [SectionModel<T>]()
func add(item: SectionModel<T>) {
sections.append(item)
}
// More funcs there...
}
我在我的 ViewModel 中创建了一个实例:
var tableViewModel = Variable<TableViewModel>(TableViewModel())
然后在我的 viewController
中收听事件viewModel.tableViewModel.asObservable().subscribe({ [weak self] value in
self?.tableView.reloadData()
}).addDisposableTo(dispose)
这里有几个问题(我对 FRP 还很陌生) :
我如何 "emit" 一个事件来触发我的自定义 class 中的 viewController 订阅? 我知道一个解决方案是将我的 sections 数组创建为 RxSwift
Variable()
然后直接收听它,但想知道是否有办法使 class (或结构)本身可观察。有没有更好的方法来解决这个问题?我浏览了 RxSwift 游乐场和示例项目,但听起来有上千种方法可以做同样的事情。也许
Observable
不是我想要的。 :)
不要将视图模型本身设为 Observable
。这是不必要的复杂性,而且不直观。如果你真的想,那么看看 Variable
是如何实现的,这应该会让你知道如何去做。
相反,只需使用主题(例如 Variable
)来保存视图模型中的数据。