我有一个 Firebase 数据库,其中包含我的图片网址。我正在尝试根据配置文件用户名调用配置文件图像。我从 profileImageURL 获得了正确的 URL,但是每当我启动 URLSession 时,它总是显示为 nil。这是我的代码:
if let profileImageURL = user.profileImageURL{
let url = URL(string: profileImageURL)
URLSession.shared.dataTask(with: url!, completionHandler: { ( data, response, error) in
//Download Hit an Error
if error != nil {
print(error!)
return
}
DispatchQueue.main.async() {
cell.profileNameImageView?.image = UIImage(data: data!)
}
})
}
示例 url 字符串:
https://firebasestorage.googleapis.com/v0/b/instagram-caption-generator.appspot.com/o/FeaturedAccounts%2FProfileImage%2Ffeatured_2.jpg?alt=media&token=4a2774f5-f192-4f06-b7c1-a4044921c075
使用带有 URL 初始化器的 if-let
block 。此错误的原因是 url 的可选实例 - init?(string: String) .您 profileImageURL
可能不是有效的 url 字符串,因此 URL 初始化程序无法创建类 URL
的实例并返回 nil,您正尝试使用 解包!
。
试试看。
if let profileImageURL = user.profileImageURL{
// Use if-let block with URL initialiser.
if let url = URL(string: profileImageURL) { // try this - if let url = URL(string: "gs://instagram-caption-generator.appspot.com/FeaturedAccounts/ProfileImage/featured_2.jpg") {
// Remove unwrapper !, from url
URLSession.shared.dataTask(with: url, completionHandler: { ( data, response, error) in
//Download Hit an Error
if error != nil {
print(error!)
return
}
if let imageData = data {
DispatchQueue.main.async() {
cell.profileNameImageView?.image = UIImage(data: imageData)
}
} else {
print("image data is nil")
}
}).resume()
} else {
print("url is nil")
}
}