ios - 下载图像,然后从 Firebase Swift 3 缓存它

标签 ios swift firebase storage download

我目前正在尝试设置用户个人资料图片。我让用户拍了一张上传到 Firebase 的图片,但我想下载该图片并缓存它。我现在在下载它时遇到问题,在我解决这个问题后,我会担心缓存它。

 // Uploading Images to Firebase
func uploadImageToFirebaseStorage(data: NSData ) {
    let storageRef = FIRStorage.storage().reference(withPath: "myPics/profilePic.jpg")
    let uploadMetaData = FIRStorageMetadata()
    uploadMetaData.contentType = "image/jpeg"
    let uploadTask = storageRef.put(data as Data, metadata: uploadMetaData) { (metadata, error) in
        if (error != nil) {
            print("I Received an error \(error?.localizedDescription)")
        } else {
            print("Upload Complete! Here is the MetaData \(metadata?.downloadURL())")
        }

    }

现在我在使用 Issue Navigator 时遇到的问题:

Issue Navigator

它在 reference = self.storage 上有这个问题。提前致谢!

//Download Image for User Profile Picture
func downloadImageUserFromFirebase() {
    let storage = FIRStorage.storage()
    var reference: FIRStorageReference!
        reference = self.storage.referenceForURL("gs:URL.appspot.com")
        reference.downloadURL { (url, error) in
    let data = NSData(contentsOf: url!)
    let image = UIImage(data: data! as Data)
    self.profileImageView.image = image
    }
    }

最佳答案

存储没有声明为类的属性,它是在该方法中声明的。此外,即使它被声明为类的属性,在 swift 中你也不需要再将 self 放在类属性之前,除非你在闭包中。

要么:

func downloadImageUserFromFirebase() {
  let storage = FIRStorage.storage()
  var reference: FIRStorageReference!
  //all I did here was remove self before storage
  reference = storage.referenceForURL("gs:URL.appspot.com")
  reference.downloadURL { (url, error) in
    let data = NSData(contentsOf: url!)
    let image = UIImage(data: data! as Data)
    self.profileImageView.image = image
  }
}

或者,理想情况下,重构代码:

class ProfileViewController: UIViewController {

  //here we are initializing it as a property of the class
  let storage = FIRStorage.storage()

  func downloadImageUserFromFirebase() {
    var reference: FIRStorageReference = storage.referenceForURL("gs:URL.appspot.com")
    reference.downloadURL { (url, error) in
      //using a guard statement to unwrap the url and check for error
      guard let imageURL = url, error == nil {
        //handle error here if returned url is bad or there is error
        return
      }
      guard let data = NSData(contentsOf: imageURL) else {
        //same thing here, handle failed data download
        return
      }
      let image = UIImage(data: data)
      self.profileImageView.image = image
    }
  }

}

关于ios - 下载图像,然后从 Firebase Swift 3 缓存它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026132/

相关文章:

android - 从 firebase 数据库读取数据失败

ios - 将 UITapGesture 添加到 UIScrollView

android - 在 Android 上播放的 iOS 上的音频文件听不到我的声音。只有声音不好

ios - 用于配置具有多个 Firebase 调用的 View 的数据源

android - Firestore离线数据会在后台同步,还是下次启动应用时同步?

Firebase 网站不会为之前浏览过网站的人更新(firebase 缓存?)

ios - 如何将用户输入发送到指定的电子邮件?

ios - 选项卡栏菜单中的 View 类

ios - 如果我插入或删除行,UITableView 部分标题会消失

objective-c - NSLayoutConstraint.constraintsWithVisualFormat 右下对齐