This question already has an answer here:
URL is always nil in Swift 3
(1个答案)
2年前关闭。
我有一个Firebase数据库,其中有我的图像URL。我试图根据“个人资料用户名”调用“个人资料图片”。我从profileImageURL获得正确的URL,但是每当我启动URLSession时,它总是显示nil。这是我的代码:
网址字符串示例:
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
(1个答案)
2年前关闭。
我有一个Firebase数据库,其中有我的图像URL。我试图根据“个人资料用户名”调用“个人资料图片”。我从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!)
}
})
}
网址字符串示例:
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
最佳答案
将if-let
块与URL初始化程序一起使用。发生此错误的原因是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")
}
}