0

我想使用滑动删除从快照中删除对象,但首先我需要进行位于视图模型中的网络调用。如果结果是成功,则移除该对象,否则什么也不做。

我正在使用自定义视图模型类来获取数据和附加部分和项目,我也希望视图模型处理所有网络调用。将网络调用放入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)
                }
            }
        }
    }
}
4

0 回答 0