加载图像到tableviewcell

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

鉴于此代码

class TableviewCellView: UITableViewCell {
    
    @IBOutlet var imgView: UIImageView!
    
    func set(model: CellDataModel){
        
    }
}

protocol CellDataModel {
    var placeholder: UIImage? { get }
    func loadImage(completion: @escaping (Result<UIImage, Error>) -> Void)
}

如何正确处理将图像加载到单元格?就像当用户快速滚动 tableview

我的基本代码是这样的,但是当 tableviewCell 回收并加载错误的图像时单元测试仍然失败

class TableviewCellView: UITableViewCell {
    
    @IBOutlet var imgView: UIImageView!

    override prepareForReuse() {
         imgView.image = nil
    }
    
    func set(model: CellDataModel){
        model.loadImage { [weak self] result in
             case .success(let image):
                  DispatchQueue.main.async {
                       self?.imgView.image = image
                  }
             case .failure(let error):
                  DispatchQueue.main.async {
                       self?.imgView.image = model.placeholder
                  }
        }
    }
}

protocol CellDataModel {
    var placeholder: UIImage? { get }
    func loadImage(completion: @escaping (Result<UIImage, Error>) -> Void)
}

我知道像这个tutorial一样在回收时应该取消加载图像功能但是由于给定代码的限制,我不太确定如何取消它

swift uitableview image-loading
© www.soinside.com 2019 - 2024. All rights reserved.