无法在 Swift 中使用来自 Firebase 的数据立即加载 UIImageView 和 UILabel

Posted

技术标签:

【中文标题】无法在 Swift 中使用来自 Firebase 的数据立即加载 UIImageView 和 UILabel【英文标题】:Unable to load the UIImageView and UILabel immediately with the data from Firebase in Swift 【发布时间】:2020-03-07 17:32:22 【问题描述】:

我有一个名为 ProfileViewController 的视图控制器,它包含一个用于显示用户头像的 UIImageView 和一个用于显示用户名的 UILabel。但是,显示头像和用户名需要一段时间。如果我转到其他视图控制器并再次重新打开它,它实际上可以立即显示它们。另外,我尝试打印出用户名和头像 url,我也可以立即从 Firebase 接收值。

代码如下:

func setUp()

    //load avatar and other informations
    databaseRef.child("profiles").child(Auth.auth().currentUser!.uid).child("information").observeSingleEvent(of: .value, with: (snapshot) in

        let value = snapshot.value as? NSDictionary
        self.username.text = value?["username"] as? String

        if let avatarURL = value?["avatar"] as? String 

            if let url = URL(string: avatarURL)
                let task = URLSession.shared.dataTask(with: url)
                    (data, response, error) in
                    if let data = data
                        DispatchQueue.main.async 
                            self.avatar.image = UIImage(data: data)
                        
                    
                
                task.resume()
            
        

    )


【问题讨论】:

代码没有问题。 1.使用不同的图像和质量以便于加载。例如,缩略图的尺寸和质量较小。 2.实现图片缓存,下次下载不用担心。 【参考方案1】:

没有办法对此进行优化,因为您已经嵌套了所需的异步调用,您可以更改的是使用SDWebImage 来缓存图像以供即将访问该 vc

【讨论】:

以上是关于无法在 Swift 中使用来自 Firebase 的数据立即加载 UIImageView 和 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

在swift中仅使用来自firebase的值返回一个键

为啥我在 Swift 中没有收到来自 Firebase 的推送通知?

Firebase + Swift:无法删除 tableView 中的行

想要使用 Swift 3.0 发送自定义电子邮件,即来自 firebase 的欢迎邮件

Tableview 中的 Swift Firebase Firestore 数据

无法使用 swift 3 在 firebase 中节点特定值