RxSwift - 可观察的自定义类

Posted

技术标签:

【中文标题】RxSwift - 可观察的自定义类【英文标题】:RxSwift - Custom class as observable 【发布时间】:2017-02-02 12:25:44 【问题描述】:

我正在创建一个自定义的通用 TableView 模型来使用 MVVM 和 RxSwift。我知道RxTableViewSectionedReloadDataSource 类,但现在不愿意在我的项目中使用它。

模型已创建并正在运行

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 很陌生) :

如何从我的自定义类“发出”一个事件来触发我在 viewController 中的订阅? 我知道一个解决方案是将我的 section 数组创建为 RxSwift Variable(),然后直接收听它,但想知道是否有办法使类(或结构)本身可观察。

有没有更好的方法来解决这个问题?我浏览了 RxSwift 游乐场和示例项目,但听起来有上千种方法可以做同样的事情。也许Observable 不是我想要的。 :)

【问题讨论】:

【参考方案1】:

不要将视图模型本身设为Observable。这是不必要的复杂性,而且不直观。如果你真的想,那么看看Variable是如何实现的,它应该会让你知道如何去做。

相反,只需使用主题(例如Variable)来保存视图模型中的数据。

【讨论】:

以上是关于RxSwift - 可观察的自定义类的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RxSwift 中使用 EventConvertible 创建客户观察者事件?

将可观察响应映射为 Angular 中的自定义接口数组

如何以编程方式添加尺寸类自定义

RxSwift 不将数据绑定到自定义集合视图单元格

UICollectionViewCell 中的 NSLayoutConstraint:尺寸类自定义不起作用

Xcode8 可以根据大小类自定义工具栏吗?