如何解决快速在整个应用程序中将结构与Firestore数据一起使用
我是Swift的新手,并且一直在圈子里讨论这个问题,因此非常感谢您的帮助!也许我在这里缺少一些基本的东西...
我正在构建一个为用户显示不同活动选项的应用程序。 所有活动信息都保存在名为“活动”的Firestore集合中。
我创建了一个名为“活动”的结构:
import FirebaseFirestore
import FirebaseFirestoreSwift
struct activity: Identifiable,Codable {
@DocumentID var id: String? = UUID().uuidString
var title: String
var category: String
var subcategory: String
var body: String
}
在特定的ViewController(“ TableViewController”)中,我具有此功能,可从Firestore中获取数据>填充结构>填充TableView:
var activities = [activity]()
var db = Firestore.firestore()
func fetchData(completion: @escaping () -> Void) {
db.collection("activities").addSnapshotListener { (querySnapshot,error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
self.activities = documents.compactMap { (queryDocumentSnapshot) -> activity? in
return try? queryDocumentSnapshot.data(as: activity.self)
}
completion()
}
}
override func viewDidLoad() {
super.viewDidLoad()
fetchData {
self.tableView.delegate = self
self.tableView.dataSource = self
}
extension TableViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
print("you tapped me!")
}
}
extension TableViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return activities.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath)
cell.textLabel?.text = self.activities[indexPath.row].title
return cell
}
}
到目前为止,TableView填充了相关数据,我可以使用print()来查看Firestore中的所有数据确实正在传递。
但是现在我被困住了-我想在应用程序的各个位置使用“活动”数据。 因此,理想情况下,我希望在应用程序首次加载时将数据获取到Struct中,然后在需要显示活动信息时能够访问结构数据,而不是每次都分别获取它(这是我目前正在做的事情) )。 我尝试将fetchData()函数移至初始视图控制器,虽然可以访问该结构并在该VC上使用数据,但无法在其他VC(即“ TableViewController”)中访问它。
我想念什么? ?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。