如何在 SwiftUI 中将 Firebase 结果转换为 List

Posted

技术标签:

【中文标题】如何在 SwiftUI 中将 Firebase 结果转换为 List【英文标题】:How to convert Firebase result to List in SwiftUI 【发布时间】:2020-08-24 05:27:37 【问题描述】:

我想根据 firebase 数据在 swiftui 中创建一个列表。所以这是我的用户界面

我已经为那个用户名“mike_one”创建了一个数据,它运行良好, 这是我的 xcode 结果


IC2ol5bimucKu2d89u2YBz0Bqot2 =     
    name = mike;
    photo = "https://firebasestorage.googleapis.com/v0/b/instagram-ios-1ed09.appspot.com/o/photo%2Fa2.jpg?alt=media&token=9b6c58f1-eedc-4190-bc63-3f3325c84d77";
    username = "mike_one";
;

这是我的数据库

所以我现在要问的是,如何使数据库的结果成为模型?所以我可以将它用作列表。

请帮助我。 感谢您的回答!

【问题讨论】:

我建议查看 CodableFirebase 并通读,例如 this 这基本上是一种将您获取的数据“解码”到您定义的对象中的方法。 【参考方案1】:

严格来说,无法将文本 firebase 数据转换为 List 对象。 SwiftUI 列表定义为

一个容器,显示排列在单列中的数据行

换句话说,它是一个 UI 元素,而不是一个数据元素。

也就是说,List 通常由 Array 或其他数据存储元素支持。因此,您将读取 Firebase 数据并将其存储在一个数组中。然后该数组支持您的 UI List 对象。

在这种情况下,我建议创建一个 UserClass 来保存 Firebase 数据

class UserClass 
   var name = ""
   var photoUrl = ""
   var username = ""

然后数组来存储你的用户

var userArray = [UserClass]()

然后在从 Firebase 读取数据时,创建用户对象并填充数组。您的 Firebase 代码并没有这么简单

firebase.observe....  snapshot in
   let user = UserClass()
   ...populate user properites from the snapshot
   self.userArray.append(user)

然后在您的视图中,访问数组元素以将它们显示在 List 对象中

struct ContentView: View 
    var body: some View 
        List(userArray)  user in
         //do something with each user object
         // like Text(user.username)
        
    

【讨论】:

以上是关于如何在 SwiftUI 中将 Firebase 结果转换为 List的主要内容,如果未能解决你的问题,请参考以下文章

无法将数据从 Firebase 附加到数组 SwiftUI

数据在 Firebase 中的保存顺序与 SwiftUI 的传输顺序不同

SwiftUI URLImage 水平滚动视图

SwiftUI 和 Firebase:如何删除用户?

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?

如何在swiftui中将vstack移动到屏幕顶部?