gpt4 book ai didi

ios - 删除项目 RxSwift MVVM 模式

转载 作者:行者123 更新时间:2023-12-01 16:06:36 25 4
gpt4 key购买 nike

嗨,有一个带有部分的 tableview,我正在调用 API 来填充 tableView。我也在使用 MVVm 架构。现在用户可以删除项目,但我尝试重新加载部分或 tableView 但没有任何 react ,因为删除的项目仍然保留在 tableView 中。下面是我的代码。任何帮助表示赞赏

我的 View 模型

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)

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

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

最佳答案

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

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

关于ios - 删除项目 RxSwift MVVM 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58787928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com