swift - Swift - 方法返回后从firebase实时数据库获取数据
问题描述
下午好。我正在学习在 iOS 上进行开发。以前,我是在 Android 上做的,但现在我不能在这里做。该变量始终返回“”。我知道这些是异步过程,一般来说,这样的函数应该在没有返回参数的情况下完成,但是如何做到这一点我不太清楚。
//在swiftUI中,我只是调用方法
import Foundation
import Firebase
import FirebaseDatabase
class GetGarbageInfo {
func getInfo(path:String) -> String{
var result = ""
let rootReference = Database.database().reference()
let garbageReference = rootReference.child("GarbageInformation").child(path).child("body")
garbageReference.observeSingleEvent(of: .value) { (DataSnapshot) in
result = DataSnapshot.value as? String ?? "0"
}
return result
}
}
解决方案
您需要使用 acompletion handler
而不是return
(正如您自己已经注意到的那样):
class GetGarbageInfo {
// add completion, remove return type
func getInfo(path: String, completion: @escaping (String) -> Void) {
var result = ""
let rootReference = Database.database().reference()
let garbageReference = rootReference.child("GarbageInformation").child(path).child("body")
garbageReference.observeSingleEvent(of: .value) { (DataSnapshot) in
result = DataSnapshot.value as? String ?? "0"
}
// return the result in the completion
completion(result)
}
}
推荐阅读
- javascript - 尝试将此 Angular 7 表单提交到我的打字稿上。ngForm 和 [(ngModel)]
- mysql - 我可以自动生成像 pt1234 或 12pt34 或 p12t34 这样的密钥吗
- java - 将清空
在 Liquibase 输入中为我的 spring 实体创建初始 DDL 脚本? - elasticsearch - 弹性搜索缩放浮动不接受数据
- tensorflow - 检查点中的张量名称与 tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) 不同
- ajax - 如何在 ajax 中接收多个数组,从 laravel 中的控制器方法作为 JSON 传递?
- mysql - 我想将 AUTO_INCREMENT 更改为 UUID
- mysql - 如何使用 ssis 将数据从 mysql 插入到 ssms
- java - 展平二叉树,将分支作为列表返回
- uml - 有人能告诉我我是否尝试过用例图来解决这种情况吗?