删除项目RxSwift MVVM模式

问题描述 投票:1回答:1

您好,有一个带有部分的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) 

ViewController

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

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

ios swift mvvm rx-swift
1个回答
0
投票

使用combineLatest代替zip。用户一次只能删除一个部分中的项目,而zip会等待,直到both部分在发出之前都发出新值。可能还有其他问题,但这肯定是一个问题。

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

© www.soinside.com 2019 - 2024. All rights reserved.