Ios 删除项目RxSwift MVVM模式

Ios 删除项目RxSwift MVVM模式,ios,swift,mvvm,rx-swift,Ios,Swift,Mvvm,Rx Swift,大家好,我有一个带有部分的tableview,我正在调用API来填充tableview。我也在使用MVVm架构。现在,用户可以删除项目,但我尝试重新加载节或tableView,但由于删除的项目仍保留在tableView中,因此什么也没有发生。下面是我的代码。谢谢你的帮助 我的ViewModel Observable.zip(identiferElements, deviceElements).map {(identifers, devices, _) -> [MyInfoSection]

大家好,我有一个带有部分的tableview,我正在调用API来填充tableview。我也在使用MVVm架构。现在,用户可以删除项目,但我尝试重新加载节或tableView,但由于删除的项目仍保留在tableView中,因此什么也没有发生。下面是我的代码。谢谢你的帮助

我的ViewModel

Observable.zip(identiferElements, deviceElements).map {(identifers, devices, _) -> [MyInfoSection] in
            var items: [MyInfoSection] = []
            let identiferRepository = identifers.map({ (repository) -> MyInfoSectionItem in
                let cellViewModel = IdentifiersCellViewModel(with: repository)
                return MyInfoSectionItem.identifiersItem(viewModel: cellViewModel)
            })
            if identiferRepository.isNotEmpty {
                items.append(MyInfoSection.setting(title: "Identifier", items: identiferRepository))
            }

            let deviceRepository = devices.map({ (repository) -> MyInfoSectionItem in
                let cellViewModel = DevicesCellViewModel(with: repository)
                return MyInfoSectionItem.devicesItem(viewModel: cellViewModel)
            })
            if deviceRepository.isNotEmpty {
                items.append(MyInfoSection.setting(title: "Active Devices", items: deviceRepository))
            }
            return items
        }.bind(to: elements).disposed(by: rx.disposeBag) 

deletedEvent.drive(onNext: { (item) in

            switch item {
            case .identifiersItem(let viewModel):
                identiferDeleted.onNext(viewModel.repository)
            case .devicesItem(let viewModel):
                deviceDeleted.onNext(viewModel.repository)
            }
        }).disposed(by: rx.disposeBag)

        identiferDeleted.asObservable().flatMapLatest({ [weak self] (value) -> Observable<ResponseBase> in
            log(value)
            guard let self = self, let id = value.id else { return Observable.just(ResponseBase()) }
            return self.provider.deleteAddress(id: id)
                .trackActivity(self.loading)
                .trackError(self.error)
        }).subscribe(onNext: { (res) in
            log(res)

        }).disposed(by: rx.disposeBag) 

将根据请求添加更多代码。谢谢

使用
combinelateest
而不是
zip
。用户一次只能从一个部分中删除一个项目,zip将等待两个部分发出新值后再发出。可能还有其他问题,但这是肯定的


我需要查看视图模型的可编译代码以进一步提供帮助。

Okay@Daniel T。我可以分享一个要点来显示视图模型吗?我已经创建了一个要点,您可以在这里查看视图模型,或者删除不需要编译的部分,或者添加代码以使其可编译。
//viewDidLoad

let input = MyInfoViewModel.Input(trigger: refresh, segmentSelection: segmentSelected, selection: tableView.rx.modelSelected(MyInfoSectionItem.self).asDriver(), deleted: tableView.rx.modelDeleted(MyInfoSectionItem.self).asDriver())
        let output = viewModel.transform(input: input)