如何从 Firebase 存储中检索数据

时间:2021-01-28 06:10:11

标签: ios swift firebase firebase-storage

嘿,我正在尝试检索保存在 firebase 存储中的用户图像,但我使用此存储路径(firebase 中的个人资料图片文件夹)作为字符串(子路径)来更新用户图像。当用户配置文件更新时没有错误,此代码只是没有更新用户图像,正如我所期望的那样,我在这里遗漏了什么,这将使我成功地获得用户图像并解决我的问题?

                            var spaceRef = Storage.storage().reference()
                        let storagePath = "gs://tunnel-vision-bc055.appspot.com/images/space.jpg"
                        spaceRef = Storage.storage().reference(forURL: storagePath)
                       let reference = spaceRef.child("profilePic")

                        // UIImageView in your ViewController
                        let imageView: UIImageView = self.ProfileImage

                        // Placeholder image
                        let placeholderImage = UIImage(named: "image/jpeg")

                        // Load the image using SDWebImage
                        imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
                            // Uh-oh, an error occurred!
                            return
                          }

1 个答案:

答案 0 :(得分:1)

这不会解决您所有的问题,但希望能解决其中的一些问题。

首先,在 Swift 中,变量和常量以小写字母开头。大写的类。例如,您的 ProfileImage 应该是 profileImage。为清楚起见,当我输入 profileImage 时,我指的是您的 ProfileImage。

现在,输入。您发布的代码中有一个常量 profileImage。这是字符串类型。您将键“ProfileImageUrl”的值设置为它。我会将其名称更改为 profileImageURL。

然后(根据您的评论之一)您正在调用 self.profileImage

let imageView: UIImageView = self.profileImage

由于您没有看到任何错误,我假设您还有一个名为 profileImage 的 UIImageView 类型的类属性。

线

// let user = User(ProfileImage: ProfileImage)

帮不了你。据我从您发布的代码中了解到 - 以及您试图实现的目标 - 您不妨将其删除。或者像我上面那样评论它(//)。

你要做的是设置一个imageView的图片。

为此你需要做

imageView.image = image

为了能够做到这一点,您需要一个 imageView 和一个图像。如果您不知道如何创建 imageView,请在 SO 上搜索答案。

然后,您可以根据从 Firebase 获得的 url 创建图像并将其设置为 imageView。有点像这样

let profileImageURL = value?["ProfileImageUrl"] as? String ?? ""
let url = URL(string: profileImageURL)

DispatchQueue.global().async {
    guard let data = Data(contentsOf: url) else {return} // if url is nil, return block is executed and code below is not
    DispatchQueue.main.async {
        self.imageView.image = UIImage(data: data)
    }
}