ios - 将数据从闭包函数传递到 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.account
的AnotherViewController
. self.accountModel?.getUpdatedModel()
如果我尝试先调用我的方法然后将if let vc = ...
逻辑放入其中,我也会遇到更多麻烦。我知道从 Firestore 调用的 async/await 代码导致代码在此块中的其他代码之前运行,但我似乎无法找出合适的关闭技术来达到我的目标。
这里的总体目标是首先获取并获取此 Firestore 文档,然后根据其内容构建模型,然后返回该模型,然后将其传递到我的 Segue 中调用的 ViewController。据我所知,我什至可能不需要使用闭包。显然我在这里有点迷路,希望能得到任何帮助。
解决方案
推荐阅读
- asp.net-core - Startup.cs 没有得到更新的 appsettings.json 值 asp.net core
- jquery - 根据屏幕尺寸更改 jquery
- r - 如何从 rmarkdown 创建 pdf,其中可以选择和复制图像
- oracle - 如何在已经有 Oracle 数据库的机器上安装 WebLogic
- docker - Cassandra alpine 图像发布计划?
- java - Docker 错误:无法找到或加载主类 Main.Main
- javascript - 更新用户信息
- java - 使用 Java Streams 从嵌套列表创建 TreeMap
- python - 类型错误:缺少多个 .py 文件所需的位置参数
- html - XSLT:如何在 html 结果中正确应用 css 类