首页 > 解决方案 > 将数据从闭包函数传递到 Segue 变量

问题描述

我对 Swift 比较陌生,尤其是在框架中使用闭包。我有以下类函数,它从 Firestore 返回一个文档并从返回的文档构建一个模型。我可以传入一个闭包以允许我接收模型:

func getUpdatedModel(callback: @escaping (AccountModel?)->Void) {
    let db = Firestore.firestore()
    let ref = db.collection("collectionName").document(self.documentId!)
 
    ref.getDocument { (document, error) in
                guard let document = document, document.exists else {
                    print("Document does not exist")
                    return
                   // callback(nil,nil)
                }
                let dataDescription = document.data()
 
      let model = AccountModel.init(dataDescription!, userId: "test")

      callback(model)
            }
    }

我有一个加载 Segue 的方法,我试图从这个闭包中获取结果以传递给 Segue 的变量以进行进一步的逻辑:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        self.accountModel?.getUpdatedModel() { model in
            if let error = error {
                return
            }
            
            let d = model
        }
 
        if let vc = segue.destination as? AnotherViewController {
            vc.account = d // model returned above
        }
    }

我似乎无法存储在闭包中检索到的值的结果,以将其传递到我vc.accountAnotherViewController. self.accountModel?.getUpdatedModel()如果我尝试先调用我的方法然后将if let vc = ...逻辑放入其中,我也会遇到更多麻烦。我知道从 Firestore 调用的 async/await 代码导致代码在此块中的其他代码之前运行,但我似乎无法找出合适的关闭技术来达到我的目标。

这里的总体目标是首先获取并获取此 Firestore 文档,然后根据其内容构建模型,然后返回该模型,然后将其传递到我的 Segue 中调用的 ViewController。据我所知,我什至可能不需要使用闭包。显然我在这里有点迷路,希望能得到任何帮助。

标签: iosswiftgoogle-cloud-firestoreclosures

解决方案


推荐阅读