我想使用滑动删除从快照中删除对象,但首先我需要进行位于视图模型中的网络调用。如果结果是成功,则移除该对象,否则什么也不做。
我正在使用自定义视图模型类来获取数据和附加部分和项目,我也希望视图模型处理所有网络调用。将网络调用放入tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)不是一种选择。
这是一个例子:
import UIKit
struct MySectionType: Hashable {}
struct MyItemType: Hashable {}
class MyViewModel {
func deleteItem(item: MyItemType) {
// Network call...
}
}
class MyViewController: UIViewController {
var viewModel: MyViewModel
// MARK: - Initialization
init?(coder: NSCoder, viewModel: MyViewModel) {
self.viewModel = viewModel
super.init(coder: coder)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
class DataSource: UITableViewDiffableDataSource<MySectionType, MyItemType> {
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
if let item = itemIdentifier(for: indexPath) {
// Call viewModel deleteItem
// viewModel.deleteItem(item: item)
// If success - deleteItems
var snapshot = self.snapshot()
snapshot.deleteItems([item])
apply(snapshot)
}
}
}
}
}