У меня есть одноэлементный класс StorageManager.swift, который является классом для управления хранилищем FireBase и функцией в нем:
public func downloadURL(for path: String, completion: @escaping (Result<String, Error>) -> Void)
{
let reference = storage.child(path)
reference.downloadURL(completion: {url, error in
guard let url = url, error == nil else
{
completion(.failure(StorageErrors.failedToGetDownload))
return
}
completion(.success(url))
})
}
Компилятор выдает ошибку типа: «Не удается преобразовать значение типа «URL» в ожидаемый тип аргумента «String»».
Используя эту общедоступную функцию, я хочу загрузить изображение в другом классе. Вот код:
StorageManager.shared.downloadURL(for: path, completion: {[weak self] result in
switch result
{
case.success(let url):
self?.downloadImage(imageView: imageView, url: url)
case.failure(let error):
print("error when fetching url download\(error)")
}
})
В этой боковой ошибке: «Невозможно преобразовать значение типа« Строка »в ожидаемый тип аргумента« URL-адрес »».
Я попытался отправить его так:
completion(.success(url.absoluteString))
и снова укажите его как URL:
self?.downloadImage(imageView: imageView, url: url as! URL)
но не удалось. Как правильно передать URL?
Решение проблемы
Ваша downloadURL()функция объявляет, что результатом является строка:
Измените его, чтобы вместо этого возвращался результат с URL-адресом:
public func downloadURL(for path: String, completion: @escaping (Result<URL, Error>) -> Void)
Комментариев нет:
Отправить комментарий