RxSwift 中的可观察元素数组

Array of observable element in RxSwift

我是 RxSwift 的新手,正在研究一些样本进行测试。我在 RxSwift 的帮助下在 uitableview 上显示了一些数据。但是,当我尝试从 tableview 中删除任何项目并重新加载时。 Observable 数组没有更新,并且由于最后一项崩溃的滚动。下面是代码,请帮助我知道我做错了什么。

self.itemArray = NSMutableArray(objects: "First Item","Second Item","Third Item","Fourth Item","Fifth Item","Sixth Item","Seventh Item","Eight Item","Nineth Item","Tenth Item","Eleventh Item","Twelveth Item","Thirtheenth Item","Fourtheenth Item","Fifteenth Item","Sixteenth Item","Seventhenth Item","First Item","Second Item","Third Item","Fourth Item","Fifth Item","Sixth Item","Seventh Item","Eight Item","Nineth Item","Tenth Item","Eleventh Item","Twelveth Item","Thirtheenth Item","Fourtheenth Item","Fifteenth Item","Sixteenth Item","Seventhenth Item")


var seqValue = Observable.just(self.itemArray)
seqValue
    .bind(to: rxtableView.rx.items) { (tableView, row, seqValue) in
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
        cell.textLabel?.text = self.itemArray.object(at: row) as? String
        cell.backgroundColor = .clear
        return cell
    }.disposed(by: disposeBag)


self.rxtableView.rx.itemDeleted
    .subscribe(onNext: { [unowned self]indexPath in
        self.itemArray.removeObject(at: indexPath.row)
        seqValue = Observable.just(self.itemArray)
        self.rxtableView.reloadData()
    }).addDisposableTo(disposeBag)

将其设为 BehaviorSubject,即 -

var seqValue = BehaviorSuject.create(self.itemArray)

而不是 'seqValue = Observable.just(self.itemArray)' 做

seqValue.onNext(self.itemArray)

不需要调用“.reloadData()”

我想你想要的是RxSwift的Variable:

let seqValue = Variable<String>(["First Item", ...])

因此您可以在 .itemDeleted 中修改该变量:

seqValue.value.remove(at: indexPath.row)

Variable 是一个 Observable,因此更改会自动传播。无需调用 reloadData().