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()