使用 Kingfisher 将 URL 加载到数组中

Load URL into array using Kingfisher

我有一个按钮可以将图像上传到我的应用程序。一旦我上传它们,它们就会存储到一个包含 URLs 的数组中。 现在我正在尝试从 URL 中检索图像并将其插入到图像视图中,然后立即将其插入到 UIImage 数组中。但它总是 returns NIL。

首先,我遇到了错误,因为它是一个数组:

Cannot convert value of type '[String]' to expected argument type 'String'

    if downloadURL != []
    {
        let url = URL(string: downloadURL) //ERROR HERE

        imageView.kf.setImage(with: url)
        imgArray.append(imageView.image!)

    }

因此它在 "imgArray.append" 处崩溃,因为 imageView returns NIL。

下载URL 确实有一个 URL 所以它不是零。

您正在尝试用 array 初始化 URLURL 需要用 String 初始化。 (错误告诉你很清楚)

此外,kf.setImage(with:) 需要 URL 进行初始化,而不是 String,因此:

尝试这样的事情:

if downloadURL.count > 0 {
        if let urlString = downloadURL.last { // I intuit that the url you want is the last one you appended 

        let url = URL(string: urlString)
        imageView.kf.setImage(with: url)

        if let image = imageView.image {
          imgArray.append(image) // Only append if the image was set conrrectly
        }
    }
}

既然你想下载所有图片,你必须这样做:

for url in downloadURL {
    guard let imageURL = URL(string: url) else {
        continue 
    }
    imageView.kf.setImage(with: imageURL)
    // to load images separately use this
    KingfisherManager.shared.retrieveImage(with: imageURL) { result in
         let image = try? result.get().image
         if let image = image {
              imgArray.append(image)
         }
     }
}