【问题标题】:How can i download images from multiple API urls but skip the unreachable如何从多个 API url 下载图像但跳过无法访问的
【发布时间】:2020-09-02 00:07:34
【问题描述】:

我正在从 API 下载图像(将多个 url 下载到 CollectionView 中)。一切正常,直到无法访问链接并且应用程序崩溃。如何从可访问的链接下载但跳过不可访问的链接?

    guard let url = URL(string: self.photos[indexPath.item]) else { return cell }
    cell.imageView.image = nil
    
    DispatchQueue.global().async {
        guard let image = UIImage(data: try! Data(contentsOf: url)) else { return }
                
        let dataCompress = image.compress(to: 1000)
        if let image = UIImage(data: dataCompress) {
            DispatchQueue.main.async {
                cell.imageView.image = image
                self.photos.append(image)
            }
        }
    }
    return cell
}

“致命错误:'试试!'表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=256 "无法打开文件“665x10002.jpg”。" UserInfo={NSURL=https://"************ *}

当链接碰巧无法访问时,当前代码会崩溃。任何帮助表示赞赏。

【问题讨论】:

标签: swift api


【解决方案1】:
  1. 如前所述,您不应该使用try!
  2. 您永远不应该使用Data(contentsOf:) 从远程服务器获取数据。该初始化程序的文档中明确提到了这一点。

相反,您应该使用

URLSession.shared.dataTask(with: url) { data, response, error in
  // process the data or handle the error
}

【讨论】:

    【解决方案2】:
    guard let image = UIImage(data: try? Data(contentsOf: url)) else { return }
    

    发生崩溃是因为您使用! 强制解开您的 try 语句。强制展开是危险的(出于这个原因),只有在您确定信息存在时才应使用,否则应用程序将崩溃。将!替换为?,如上,当URL内容不可用时优雅返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多