GOOGLE ADS

понедельник, 2 мая 2022 г.

Как отправить URL-адрес через завершение .success в Swift?

У меня есть одноэлементный класс 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)

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...