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()
.
我是 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()
.