URL在解开时出乎意料地发现了无



我有一个我的图像URL所在的firebase数据库。我正在尝试根据配置文件用户名调用配置文件图像。我从ProfileMimageurl那里获得了正确的URL,但是每当我启动urlsession时,总是会显示零。这是我的代码:

 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/featsudaccounts/profileimage/featured_2.jpg?-A4044921C075

使用URL初始机使用if-let块。此错误的原因是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/FeaturedAccoun‌​ts/ProfileImage/feat‌​ured_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")
  }
}

您可以使用 guardif let语句,然后unwrap profileImageURL and 验证它实际上是一个有效的URL,例如So:

guard let profileImageURL = user.profileImageURL,
      let url = URL(string: profileImageURL) else { return }
// now you know that url is definitely a valid URL
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!)
     }
})

节省了拆开的!的力,这会导致您问题(如您刚刚发现的那样)。

希望会有所帮助。

相关内容

最新更新