Загрузить URL в массив с помощью Kingfisher - PullRequest
0 голосов
/ 10 июня 2019

У меня есть кнопка, где я могу загрузить изображения в свое приложение.И как только я загружаю их, они сохраняются в массив, который содержит URL-адреса.Сейчас я пытаюсь извлечь изображение из URL-адреса и вставить его в изображение, и сразу после того, как оно будет вставлено в массив UIImage.Но он всегда возвращает NIL.

Во-первых, я получаю ошибку, потому что это массив:

Невозможно преобразовать значение типа '[String]' в ожидаемый тип аргумента'String'

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

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

    }

Так что происходит сбой в imgArray.append, так как imageView возвращает NIL.

downloadURL имеет URL, поэтому он не равен нулю.

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Так как вы хотите загрузить все изображения, вы должны сделать что-то вроде этого:

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)
         }
     }
}
0 голосов
/ 10 июня 2019

Вы пытаетесь инициализировать URL с array, URL необходимо инициализировать с 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
        }
    }
}
...