如何使用 RxSwift 将数据添加到 tableview 或 collectionview

How to prepend data to tableview or collectionview using RxSwift

我可以看到我可以像 PublishVariable 一样使用 Subject 将新元素添加到 table 视图或集合视图,并且会正确显示在end 但如果需要在 table 视图的开头添加新数据怎么办。那怎么办呢??

如何将数据添加到可观察序列中,以便新数据显示在 table 视图或集合视图的顶部???

您可以使用 combineLatest运算符。

最初,newData是一个空数组,当你向它添加数据时,它显示在tableView

的顶部
    let data = [
        "A New Hope",
        "The Empire Strikes Back",
        "Return of the Jedi"
    ]

    let obsData = Observable.just(data)

    let newData = [
        "The Phantom Menace",
        "Attack of the Clones",
        "Revenge of the Sith"
    ]
    let obsNewData = Observable.just(newData)

    let items = Observable.combineLatest(obsData, obsNewData){
        +[=10=] 
    }     

    items.bindTo(tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)) { (row, film, cell) in
        cell.textLabel?.text = film
    }
    .addDisposableTo(disposeBag)

我正在寻找的完整外观

import UIKit
import RxSwift
import RxCocoa

struct Person {
    let name : String
    let age : Int

}
class ViewController: UIViewController {
    let personArray = [
        Person(name: "name1", age: 11),
        Person(name: "name2", age: 12),
        Person(name: "name3", age: 13)
    ]

    let disposeBag = DisposeBag()
    var items : Observable<[Person]>!

    @IBOutlet weak var mytable: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        items = Observable.just(personArray)
        bindData()
    }

    @IBAction func prependButtonAction(_ sender: UIButton) {
        let newPersonArray = [
            Person(name: "name -3", age: 11),
            Person(name: "name -4", age: 12)
        ]
        prependData(dataToPrepend: newPersonArray)
    }

    @IBAction func appendButtonAction(_ sender: UIButton) {
        let newPersonArray = [
            Person(name: "name 6", age: 11),
            Person(name: "name 7", age: 12)
        ]
        appendData(dataToAppend : newPersonArray)
    }



    private func bindData() {
        mytable.dataSource = nil
        items.bindTo(mytable.rx.items(cellIdentifier: "cell")) { (row, person, cell) in
            if let cellToUse = cell as? TableViewCell {
                cellToUse.label1.text = person.name
                cellToUse.label2.text = "\(person.age)"
            }
        }.addDisposableTo(disposeBag)
    }

    private func prependData(dataToPrepend : [Person]) {
        let newObserver = Observable.just(dataToPrepend)
        items = Observable.combineLatest(items, newObserver) {
            +[=10=]
        }
        bindData()
    }


    private func appendData(dataToAppend : [Person]) {
        let newObserver = Observable.just(dataToAppend)
        items = Observable.combineLatest(items, newObserver) {
            [=10=]+
        }
        bindData()
    }
}