为什么我的If-Else块不按照应有的方式工作?

时间:2016-05-11 03:16:41

标签: ios swift

我是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"
            }

    })

    }

1 个答案:

答案 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的方式。