Swift &引用;无法转换类型为';()';要创建“UIImage”,请执行以下操作:敏捷的

Swift &引用;无法转换类型为';()';要创建“UIImage”,请执行以下操作:敏捷的,swift,uiimage,Swift,Uiimage,我试图从URL加载UIImage,然后通过闭包将该UIImage传递回 这是获取图像的代码: func getImageFromData(_ imgURL:URL, completion: @escaping imageClosure) { print("Download Started") getDataFromUrl(url: imgURL) { data, response, error in guard let data = data, error ==

我试图从URL加载UIImage,然后通过闭包将该UIImage传递回

这是获取图像的代码:

func getImageFromData(_ imgURL:URL, completion: @escaping imageClosure) {

    print("Download Started")
    getDataFromUrl(url: imgURL) { data, response, error in
        guard let data = data, error == nil else {
            return
        }

        if let thisImage = UIImage(data: data) {
            completion(thisImage)
        }

    }

}

func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
    URLSession.shared.dataTask(with: url) { data, response, error in
        completion(data, response, error)
        }.resume()
}
这是图像结束

typealias imageClosure = (_ thisImage:UIImage) -> Void
我是这样打电话的

let thisImage:UIImage = myAPIManager.getImageFromData(thisImageURL, completion: { (thisImage:UIImage) in

    })
我在上面一行得到了错误:

Cannot convert value of type '()' to specified type 'UIImage'

getImageFromData的定义返回Void(该类型的唯一成员也称为Void,也称为空元组,())。它不会返回图像


您需要在回调闭包内设置映像,而不是通过分配函数不存在的返回值。

此函数
getImageFromData
非返回值

编辑此

let thisImage:UIImage = myAPIManager.getImageFromData(thisImageURL, completion: { (thisImage:UIImage) in

    }) 
对此

myAPIManager.getImageFromData(thisImageURL, completion: { (thisImage:UIImage) in

let myImage:UIImage = thisImage

    })

您对
getImageFromData
的定义返回
Void
(该类型的唯一成员也称为
Void
,也称为空元组,
()
)。它不返回图像。
getDataFromUrl
的意义是什么?它只是以一种不可扩展的方式包装URLSession,这并不能给您带来多少好处。而闭包
{data,response,error in completion(data,response,error)}
可以写成
completion
URLSession.shared.dataTask(with:url,completion.resume()
事实上这是我的问题:让thisImage:UIImage=…不知道为什么我把它放在那里,结束了漫长的一天。但是谢谢你关于代码的其他建议@Alexander-没有看到你的第一条评论-回答一下,我会接受的。谢谢,有时候额外的一双眼睛就是所需要的。