RxSwift 和重复的数组数据
RxSwift and duplicated array data
我有一个 ViewController,其中显示了一组数据(收藏夹ViewController)。在另一个 ViewController 中,我可以 select 我想从之前的 ViewController 添加到列表中的 objects,但是有一个问题。如果我从第二个 ViewController 回来,数据是重复的。每次我回到提到数组的 ViewController 时,我都会刷新最新数据的数据,这会导致重复。我该如何解决?
收藏夹ViewController:
class FavoriteViewController: UIViewController {
@IBOutlet weak var stationsTableView: UITableView!
private var disposeBag = DisposeBag()
private var viewModel = FavoriteViewModel()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.hidesBottomBarWhenPushed = true
stationsTableView.rx.setDelegate(self).disposed(by: disposeBag)
bindTableView()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.hidesBottomBarWhenPushed = false
stationsTableView.dataSource = nil
stationsTableView.delegate = nil
}
override func viewDidDisappear(_ animated: Bool) {
disposeBag = DisposeBag()
}
func bindTableView() {
self.viewModel.stationItems.asObservable().distinctUntilChanged().bind(to: stationsTableView.rx.items(cellIdentifier: "cell", cellType: FavoriteTableViewCell.self)) { (row,item,cell) in
cell.cellStation = item
}.disposed(by: disposeBag)
stationsTableView.rx.modelSelected(StationItem.self).subscribe(onNext: { item in
print("SelectedItem: \(item)")
}).disposed(by: disposeBag)
deleteStation()
viewModel.fetchSavedStationItems()
}
FavoriteViewModel:
class FavoriteViewModel: ObservableObject {
private let apiService : APIServiceProtocol
private let persistenceService: PersistenceServiceProtocol
public let stationItems = BehaviorSubject<[StationItem]>(value: [])
var itemsList = [StationItem]()
init(apiService: APIServiceProtocol = APIService(), persistenceService: PersistenceServiceProtocol = PersistenceService()) {
self.apiService = apiService
self.persistenceService = persistenceService
}
func fetchSavedStationItems() {
do {
itemsList += try persistenceService.fetchStationItems()
self.stationItems.onNext(itemsList)
} catch {
print("ERROR fetchedSavedStationItems FavoriteViewModel")
}
}
因为您总是在 fetchSavedStationItems() 中附加您的数组
itemsList += try persistenceService.fetchStationItems()
尝试在追加之前清除数组
itemsList.removeAll()
itemsList += try persistenceService.fetchStationItems()
我有一个 ViewController,其中显示了一组数据(收藏夹ViewController)。在另一个 ViewController 中,我可以 select 我想从之前的 ViewController 添加到列表中的 objects,但是有一个问题。如果我从第二个 ViewController 回来,数据是重复的。每次我回到提到数组的 ViewController 时,我都会刷新最新数据的数据,这会导致重复。我该如何解决?
收藏夹ViewController:
class FavoriteViewController: UIViewController {
@IBOutlet weak var stationsTableView: UITableView!
private var disposeBag = DisposeBag()
private var viewModel = FavoriteViewModel()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.hidesBottomBarWhenPushed = true
stationsTableView.rx.setDelegate(self).disposed(by: disposeBag)
bindTableView()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.hidesBottomBarWhenPushed = false
stationsTableView.dataSource = nil
stationsTableView.delegate = nil
}
override func viewDidDisappear(_ animated: Bool) {
disposeBag = DisposeBag()
}
func bindTableView() {
self.viewModel.stationItems.asObservable().distinctUntilChanged().bind(to: stationsTableView.rx.items(cellIdentifier: "cell", cellType: FavoriteTableViewCell.self)) { (row,item,cell) in
cell.cellStation = item
}.disposed(by: disposeBag)
stationsTableView.rx.modelSelected(StationItem.self).subscribe(onNext: { item in
print("SelectedItem: \(item)")
}).disposed(by: disposeBag)
deleteStation()
viewModel.fetchSavedStationItems()
}
FavoriteViewModel:
class FavoriteViewModel: ObservableObject {
private let apiService : APIServiceProtocol
private let persistenceService: PersistenceServiceProtocol
public let stationItems = BehaviorSubject<[StationItem]>(value: [])
var itemsList = [StationItem]()
init(apiService: APIServiceProtocol = APIService(), persistenceService: PersistenceServiceProtocol = PersistenceService()) {
self.apiService = apiService
self.persistenceService = persistenceService
}
func fetchSavedStationItems() {
do {
itemsList += try persistenceService.fetchStationItems()
self.stationItems.onNext(itemsList)
} catch {
print("ERROR fetchedSavedStationItems FavoriteViewModel")
}
}
因为您总是在 fetchSavedStationItems() 中附加您的数组
itemsList += try persistenceService.fetchStationItems()
尝试在追加之前清除数组
itemsList.removeAll()
itemsList += try persistenceService.fetchStationItems()