我是swift和使用firebase的新手,我制作了一个简单的应用程序,让用户输入一个手机前缀号,并显示该号码的蜂窝网络。
我对if-else部分遇到了严重问题。每当我添加else部分时,标签总是显示" Missing"但每当我打印snapshot.key和snapshot.value时,我都会在控制台中得到正确的结果。当我删除else部分时,它可以工作。我真的很难找到答案。提前致谢!这是代码:
import UIKit
import Firebase
class ViewController: UIViewController, FBSDKLoginButtonDelegate {
let loginButton: FBSDKLoginButton = {
let button = FBSDKLoginButton()
button.readPermissions = ["email"]
return button
}()
@IBOutlet weak var numField: UITextField!
@IBOutlet weak var answerField: UILabel!
@IBAction func enterButton(sender: AnyObject) {
matchNumber()
}
func matchNumber(){
let number: String = numField.text!
let numRef = Firebase(url: "https://npi2.firebaseio.com/num_details")
numRef.queryOrderedByKey().observeEventType(.ChildAdded, withBlock: { snapshot in
let network = snapshot.value as! String!
if snapshot.key == self.numField.text! {
self.answerField.text = network
}
else {
self.answerField.text = "Missing"
}
})
}
答案 0 :(得分:1)
我想我知道发生了什么。
<强>说明强>
1)您向Firebase提出请求。
2)请求是异步的,因此代码一直在运行。
3)请求尚未完成,因此执行了else
语句,因为尚未返回值(检查初始状态)。
4)当您删除else
时,代码执行if
,因为在请求完成之前没有其他任何内容要执行(检查初始状态但没有代码要执行它,然后Firebase再次检查,因为存在数据更改并且执行了if
语句。
<强>参考:强>
从FIREBASE文件(你应该在来到这里之前阅读:P)
“通过将异步侦听器附加到数据库引用来检索Firebase数据。对于数据的初始状态,将逐次触发侦听器,并且在数据发生任何时候再次触发。本文档将介绍检索数据的基础知识,如何订购数据以及如何对Firebase数据库中的数据执行简单查询。“
https://www.firebase.com/docs/ios/guide/retrieving-data.html
<强> SOLUTION:强>
使用完成处理程序。它就是为此而做的。请勿在您的请求中使用else
语句。这不是你使用Firebase的方式。