【问题标题】:UI Stack when adding many document to firestore in one time一次将多个文档添加到 Firestore 时的 UI 堆栈
【发布时间】:2021-07-17 08:58:35
【问题描述】:

我的项目中有对象“小时”

那是我在 Firestore 中添加小时的功能。

func addHour(_ hour: Hour) {
        
            do {
                let _ = try self.db.collection("hours").addDocument(from: hour)
            } catch {
                fatalError("Unable to uncode hour:")
            }
        
    }

单独添加小时时效果很好,但一键添加 24 小时时,UI 需要近 20 秒才能返回交互式

这是我的快照监听器,用于从 firestore 加载数据并保存在存储库中。

init() {
        loadData()
    }
    
    func loadData() {
        let rf = db.collection("hours").order(by:"hourNumber")
            rf.addSnapshotListener { (querySnapshot, error) in
                if let querySnapshot = querySnapshot {
                    self.hours = querySnapshot.documents.compactMap { document in
                        try? document.data(as: Hour.self)
                    }
                }// if let
            }
    }

这是一键添加 24 小时的按钮操作

for index in 1...24 {
                        let myHour: Hour = Hour(number: index)
                        self.hourRepository.addHour(myHour)
        }

我尝试了很多方法,比如后台线程... 并延迟异步它确实工作并且 UI 堆叠 20 秒

所以我的问题是如何在点击时将 24 个文档添加到 firestore 并且 UI 不会堆叠 ..?!

【问题讨论】:

标签: firebase google-cloud-firestore swiftui


【解决方案1】:

你可以看看 swift 5.5 并发, “Swift 内置支持以结构化方式编写异步和并行代码。”请参阅“https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html” 连同 await/async 和 SwiftUI 任务,如:

    .task {
        await loadData()
    }
    
    func loadData() async { ... } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多