SwiftUI 将数据从 Firebase 加载到 TextView

Posted

技术标签:

【中文标题】SwiftUI 将数据从 Firebase 加载到 TextView【英文标题】:SwiftUI load data from Firebase to TextView 【发布时间】:2020-02-17 15:31:23 【问题描述】:

我有一个 Swift5 项目,但我认为使用 SwiftUI 仅构建其中一个屏幕会更容易。 问题是我对 SwiftUI 一无所知,所以如果我的问题很愚蠢,我很抱歉。 屏幕上有一个 TextView,我想从 firebase 加载文本数据。 我的问题是我无法在 TextView 中使用加载的数据。

谁能帮助我如何在我的 VStack 中使用函数的变量(如果可能的话)? 我尝试将函数放在 VStack 中,但它给了我一些错误。

这是我的代码:

 var body: some View 
        List 
            VStack 
                Text("Just some dummy data, this is not important.")
                // i want the "text" variable from loadData() to be in this Text                
            
        .onAppear 
            func loadData() 
                guard let userdef = userdefStr(forKey: "didSelect") else  return 

                self.db.collection("news").whereField("title", isEqualTo: userdef)
                    .getDocuments()  (querySnapshot, err) in
                        if let err = err 
                            print("Error getting documents: \(err)")
                         else 
                            for document in querySnapshot!.documents 

                               let text = document.data()["text"] as? String ?? ""
                                // this variable should be in the VStack's Text
                                print("text: \(text)")
                                Text(text)
                            
                        
                
            
            // i think this is how i can call the loadData function,maybe i am wrong
            loadData()
        

【问题讨论】:

【参考方案1】:

我的问题的答案称为“SwiftUI 状态变量”。

我必须创建一个新的 State 变量:@State var text = "Just some dummy data, this is not important."

在 VStack 中:Text(text)

最后在let text = document.data()["text"] as? String ?? "" 之后我放了self.text = description 的广告

【讨论】:

您还需要在 `print("text" (text)") 语句之后删除 Text(text)。这是一种有趣的方法,而且绝对可行。但是,我建议您提取您的将数据访问层放到一个单独的类中,以使您的代码更易于维护。

以上是关于SwiftUI 将数据从 Firebase 加载到 TextView的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 和 Firebase:从推送通知中获取信息

将 Firebase 实时数据库与 SwiftUI 列表一起使用 - 清除列表

在 SwiftUI 中仅更新来自 Firebase 的新数据

SwiftUI - 将存储中图像文件的路径移动到 Firebase 上的实时数据库 [重复]

过滤 Firebase 数据 SwiftUI

如何将过去几天的数据从 Firebase 重新加载到 BigQuery?