【问题标题】:RxSwift: Append elements to Observable<[_]>RxSwift:将元素附加到 Observable<[_]>
【发布时间】:2016-05-08 17:25:16
【问题描述】:

我有一个数组 (Observable&lt;[_]&gt;),它是表格视图的数据源。我希望能够将新元素附加到它,并在每次将新元素附加到数组时更新 tableview。我找不到如何向Observable&lt;[_]&gt; 添加新元素。

【问题讨论】:

    标签: swift rx-swift


    【解决方案1】:

    使用Subject,例如Variable。然后只需将value 属性视为您的Arrayappend 即可添加新元素。通过asObservable()订阅Variable

    我已经使用String 简化了代码示例,但是您需要使用某种UITableViewCell

    let dataSource = Variable<[String]>([])
    
    dataSource.value.append("some string A")
    
    dataSource.asObservable()
        .subscribeNext { e in
            print(e)
        }
        .addDisposableTo(disposeBag)
    
    dataSource.value.append("some string B")
    

    一旦你有了你的数据源,你会想要通过

    将它连接到一个 tableView
    dataSource.asObservable().bindTo(yourTableView.rx_itemsWithCellIdentifier("MyCellClass", cellType: MyCellClass.self)) { (row, element, cell) in
          // do your cell configuration here
    }
    

    【讨论】:

    • 由于计划弃用变量,关于如何使用 BehaviorRelay 执行此操作的任何想法 - 推荐的替代方案? behaviorRelay.value.append 是不允许的,因为 BehaviorRelay.value 是非变异成员。
    • 正如本期评论中提到的,您可以通过调用value 来获取BehaviorRelay 的值。然后您可以通过调用accept 附加到它并返回新值。 github.com/ReactiveX/RxSwift/issues/1501#issuecomment-349334148
    • 这就是我最终要做的,但由于值是不可变的,我正在创建一个新数组而不是追加。这样做会带来性能损失。在我的测试中,性能影响似乎可以接受,所以我会保留它。但我很想有一种方法来做一个实际的追加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2021-12-26
    • 2015-06-22
    • 2013-10-12
    • 2020-01-01
    相关资源
    最近更新 更多