如何通过 Swift 中的 .success 完成发送 URL?

How to send a URL via .success completion in Swift?

我有一个 StorageManager.swift 单例 class,它是一个 class 用于管理 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'”

通过使用此 public 功能,我想在另一个 class 中下载图像。这是 代码:

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)")
        }
    })

这边的错误是:“无法将类型 'String' 的值转换为预期的参数类型 'URL'”

我试过这样发送:

completion(.success(url.absoluteString))

并再次将其转换为 URL:

 self?.downloadImage(imageView: imageView, url: url as! URL)

但失败了。 如何正确传递 URL?

您的 downloadURL() 函数声明结果是一个字符串:

将其更改为 return 一个带有 URL 的结果:

public func downloadURL(for path: String, completion: @escaping (Result<URL, Error>) -> Void)