我正在尝试从Firebase用户个人资料中提取图片网址。 当我打电话: -
@IBOutlet weak var profileImage: UIImageView?
profileImage?.image = Auth.auth().currentUser?.photoURL
我出现以下错误: -
Cannot assign value of type 'URL?' to type 'UIImage?'
我尝试使用xcode提供的修补程序,但这些只会导致进一步的问题。
我打印时: -
print(Auth.auth().currentUser?.photoURL as Any)
我得到以下输出,所以我知道那里有一个图像。
Optional(https://graph.facebook.com/10X60X70X35X101X5/picture)
如何将此图像拉入,或者是否可以将其转换为字符串以便我可以使用它?
提前致谢。
答案 0 :(得分:0)
您需要下载图像,然后将imageView的图像设置为下载的图像。您可以使用URLSession的dataTask:
执行此操作// Playground code
import UIKit
import PlaygroundSupport
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
let session = URLSession.shared
let url = URL(string: "http://via.placeholder.com/400x400")!
_ = session.dataTask(with: url) { data, response, error in
guard error == nil else {
print(error)
return
}
guard let data = data else {
print("[DEBUG] - No data returned")
return
}
DispatchQueue.main.async {
imageView.image = UIImage(data: data)
}
}.resume()
PlaygroundPage.current.liveView = imageView
或者您可以使用KingFisher等库来为您处理,然后您可以这样称呼它:
let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)
答案 1 :(得分:0)
您无法将图片分配给图片,请使用SDWebImage异步下载以不阻止主线程
if let url = Auth.auth().currentUser?.photoURL {
self.profImageV.sd_setImage(with: url , placeholderImage: UIImage(named: "edit2.png"))
}
答案 2 :(得分:0)
错误消息非常明确,您尝试将URL?
类型分配给UIImage?
类型。由于它是URL?
,您应首先打开它,然后使用此网址下载图像。当您拥有UIimage
时,您可以分配它。
答案 3 :(得分:0)
实际上您正在将URL
类型转换为UIImage
类型,这是不可能的。您需要从网址下载图片并在图片视图中或您想要使用的任何位置进行设置。
DispatchQueue.global(qos: .background).async {
if let url = URL(string: <#imageUrl#>) {
do {
let imgData = try Data(contentsOf: url)
if let image = UIImage(data: imgData) {
DispatchQueue.main.async {
self.imageView.image = image
}
}
} catch {
debugPrint("From catch block: Image could not be downloaded !!")
}
}
}