Преобразование строки URL-адреса изображения API в UIImageIOS

Программируем под IOS
Ответить
Anonymous
 Преобразование строки URL-адреса изображения API в UIImage

Сообщение Anonymous »

Я пытаюсь преобразовать строку URL-адреса, полученную от API. Я получаю URL-адрес API в своем modelView, как показано ниже:

Код: Выделить всё

class DetailViewModel {

var countryCode : String?

public func getImageURL(with completion: @escaping (String) -> Void) {
APIHandler.getDataForCountryImage(for: countryCode!) { result in
print("result is \(result)")
completion(result.data.flagImageUri)
}
}
}
Приведенный выше оператор печати успешно печатает URL-адрес в виде строки. Поэтому нет проблем с получением URL-адреса в виде строки.
Я инициализирую свой viewController с помощью viewModel, как показано ниже:

Код: Выделить всё

private var viewModel: DetailViewModel

//MARK: - LifeCycle

init(with viewModel: DetailViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)

}
и пытаюсь преобразовать строку URL-адреса изображения, полученную из modelView, в UIImage с помощью приведенного ниже кода:

Код: Выделить всё

 private func setCountryFlagImage() {
self.viewModel.getImageURL { [weak self] imageURL in
print("image url is \(imageURL)")
let url = URL(string: imageURL)
DispatchQueue.main.async {
self?.countryImage.load(url: url!)
}
}
}
эта функция также печатает оператор print("image url is (imageURL)") со связанным URL-адресом в виде строки.
Внутри диспетчерского запроса я в основном использую расширение UIImageView, которое написал ниже. countryImage — это UIImageView, изображение которого я хочу обновить.

Код: Выделить всё

extension UIImageView {
func load(url: URL) {
URLSession.shared.dataTask(with: url) { data, response, error in
if error == nil {
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data) else { return }
DispatchQueue.main.async { [weak self] in
print("dispatch")
self?.image = image
}
}
else {
print("error is \(error)")
}

}.resume()
}
}
Когда я запускаю код, я вижу оператор печати setCountryFlagImage в терминале, но дополнительно появляется предупреждение "[boringssl] Boringssl_metrics_log_metric_block_invoke(144)" но я думаю, что это может не иметь отношения к моей проблеме.
В блоке расширения кода я никогда не вижу print("dispatch") и это происходит потому, что я не могу защитить let image = UIImage(data: data)
Что мне здесь не хватает?

Подробнее здесь: https://stackoverflow.com/questions/701 ... to-uiimage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»