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的主要内容,如果未能解决你的问题,请参考以下文章
将 Firebase 实时数据库与 SwiftUI 列表一起使用 - 清除列表
在 SwiftUI 中仅更新来自 Firebase 的新数据