gpt4 book ai didi

ios - 在 Firebase 中,我可以从 .observeSingleEventOfType() 获取已完成执行其代码块的信号吗?

转载 作者:行者123 更新时间:2023-11-30 13:05:28 25 4
gpt4 key购买 nike

请看下面的代码。 varable v 从 Firebase 数据库获取某种 String,然后将其打印出来。

var v = "no"
let ref = FIRDatabase.database().reference()

ref.child("db").observeSingleEventOfType(.Value, withBlock: {snapshot in
v = snapshot.value!["blah"] as! String//assume it gets "ok"
print("This one shouldn't come first")
})

print("v is \(v)!!")

.observeSingleEventOfType() 中的实际代码更复杂,但这个还可以。

在该方法中,变量v 获取一个String。但是 print 语句不会打印 "ok" 而是打印 "no",因为该方法是异步的。

我想要做的是从 .observeSingleEventOfType() 获取一个信号或类似的信号,表明它已完成执行所有代码行,然后执行 print() 方法.

可以做我想做的事吗?或者我可以暂停所有代码直到该代码块完成吗?

最佳答案

completionBlocks:本身就是一种信号,表明您的方法或函数已完成其功能,如下所示

func printData(){

retrieveData{(retrievedBlah) in
print(retrievedBlah) //"Ok"
}
}



func retrieveData(completionBlock : ((blah : String!) -> Void)){

ref.child("db").observeSingleEventOfType(.Value, withBlock: {snapshot in
v = snapshot.value!["blah"] as! String//assume it gets "ok"
completionBlock(blah : v)
print("This one shouldn't come first")
})

}

但是,如果您仍然想检查您尝试存储在数据库中的值是否已保存,请根据以下条件使用 eventType 监听该节点:-

  • case ChildAdded//0,当新的子节点添加到某个位置时触发

  • case ChildRemoved//1,当从某个位置删除子节点时触发

  • case ChildChanged//2,当某个位置的子节点发生变化时触发

  • case ChildMoved//3,当子节点相对于某个位置的其他子节点移动时触发

  • case Value//4,当某个位置的任何数据更改以及任何子级(递归地)发生更改时触发

然后交叉检查它是否存储...

关于ios - 在 Firebase 中,我可以从 .observeSingleEventOfType() 获取已完成执行其代码块的信号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39429303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com