通过快速关闭从函数中检索值
Posted
技术标签:
【中文标题】通过快速关闭从函数中检索值【英文标题】:Retrieve value from function with swift closure 【发布时间】:2020-06-08 09:36:48 【问题描述】:我想使用 firebase firestore 收集有关用户的信息,我在一个 Class a 函数中执行此操作,但我想与我的 struct ContentView 共享此信息。
class UserData : ObservableObject
// Use Firebase library to configure APIs
@Published var db = Firestore.firestore()
@Published var WholeDocument : Array<String> = []
func GetAllData(completion: @escaping (Array<String>) -> ())
db.collection("Users").getDocuments() (querySnapshot, err) in
if let err = err
print("Error getting documents: \(err)")
completion([""])
else
for document in querySnapshot!.documents
//print("\(document.documentID) => \(document.data())")
self.WholeDocument.append(document.documentID)
completion(self.WholeDocument)
我尝试在我的 contentView 中收集这个数组
func Connection()
self.Database.GetAllData(tab) in
if tab.count > 0
self.WholeDocumentContentView = tab
else
print("Not found")
如何用闭包检索 WholeDocument 数组? 谢谢你的帮助。
【问题讨论】:
【参考方案1】:如果我正确理解结构/问题,您的目标是在另一个 SwiftUI 视图中访问 WholeDocument
数组。这样做的方法可能是:
class UserData : ObservableObject
// Use Firebase library to configure APIs
private var db = Firestore.firestore()
@Published var WholeDocument : Array<String> = []
init()
db.collection("Users").getDocuments() (querySnapshot, err) in
if let err = err
print("Error getting documents: \(err)")
completion([""])
else
for document in querySnapshot!.documents
// print("\(document.documentID) => \(document.data())")
self.WholeDocument.append(document.documentID)
struct MyContentView : View
@ObservedObject var database: UserData
var body: some View
// access database.WholeDocument
List(database.WholeDocument, id: \.self)
// do something
这样,当您使用UserData
的实例初始化MyContentView
时,您将能够在该视图中观察WholeDocument
。
【讨论】:
它有效,谢谢,它是否有另一种方法可以通过@escape 关闭,也许我没有弄清楚这个概念。 您应该能够在.onAppear
闭包或其他东西中运行UserData
中的任何函数(如果您希望它以恒定的时间间隔更新,您可以使用matt 的答案here)并通过 Connection()
作为闭包,是的
好的,我明白了,谢谢。以上是关于通过快速关闭从函数中检索值的主要内容,如果未能解决你的问题,请参考以下文章
通过托管标识从 c# Azure 函数检索配置值的 Azure 应用程序配置不起作用