
var stringnames = [String] () ref?.observeEventType(.Value,withBlock: { snapshot in var newnames: [String] = [] for item in snapshot.children { if let item = item as? FIRDataSnapshot { let postDict = item.value as! [String: String] newnames.append(postDict["name"]!) } } stringnames = newnames }) print(stringnames) stringnames返回空,但是当我从闭包内打印时,它有正确的数据.非常感谢任何帮助,谢谢!
解决方法 那是因为当您从Firebase获取数据时,调用是异步的.你可以做什么:选项1 – 在闭包内设置逻辑(就像你在封闭内部打印var一样).
选项2 – 定义您自己的闭包,用于接收您的数据,如:
func myMethod(success:([String])->VoID){ ref?.observeEventType(.Value,withBlock: { snapshot in var newnames: [String] = [] for item in snapshot.children { if let item = item as? FIRDataSnapshot { let postDict = item.value as! [String: String] newnames.append(postDict["name"]!) } } success(newnames) })} 选项3 – 使用委托模式
protocol MyDelegate{ func dIDFetchData(data:[String])}class MyController : UIVIEwController,MyDelegate{ func myMethod(success:([String])->VoID){ ref?.observeEventType(.Value,withBlock: { snapshot in var newnames: [String] = [] for item in snapshot.children { if let item = item as? FIRDataSnapshot { let postDict = item.value as! [String: String] newnames.append(postDict["name"]!) } } self.dIDFetchData(newnames) }) } func dIDFetchData(data:[String]){ //Do what you want }} 总结 以上是内存溢出为你收集整理的ios – 从一个从firebase中检索数据的闭包中获取数据全部内容,希望文章能够帮你解决ios – 从一个从firebase中检索数据的闭包中获取数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)