2016-05-11 84 views
0

我是新來swift和使用firebase,我正在做一個簡單的應用程序,讓我們的用戶輸入一個蜂窩前綴號碼,並顯示什麼蜂窩網絡是該號碼。爲什麼我的If-Else塊不能按照它應該的方式工作?

我對if-else部分有一個難題。每當我添加else部分時,標籤總是顯示「Missing」,但每當我打印snapshot.key和snapshot.value時,我都會在控制檯中得到正確的結果。當我刪除其他部分時,它可以工作。我真的很難找出答案。提前致謝!這裏是代碼:

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

    }) 

    } 
+2

您發佈的代碼中沒有'else'。請將發佈的代碼縮小到與問題相關的部分。 – rmaddy

+0

我不好意思。我已經編輯過它。謝謝 – asdf

+0

當你打印'snapshot.key'和'self.numField.text!'它們是否相同時,你會得到什麼?你提到了快照鍵和值,但那不是你正在測試的 – Fonix

回答

1

我想我知道發生了什麼事。


說明:

1)你讓你的請求火力地堡。

2)請求是異步的,所以代碼保持運行。

3)請求還沒有完成,因此else語句被執行,因爲該值尚未返回(檢查初始狀態)。

4)當您刪除else,代碼執行if因爲沒有別的執行,直到該請求完成(初始狀態進行檢查,但沒有代碼,它執行,然後火力地堡再次檢查,因爲有是數據更改並執行語句if)。


參考:

從火力文檔(你應該來這裏之前已經閱讀:P)

「火力地堡數據由異步監聽器連接到一個數據庫引用檢索。監聽者將被觸發一次,初始狀態爲,數據爲,並且在數據發生變化時再次變爲。本文檔將介紹檢索數據的基礎知識,數據如何處理ered,以及如何對您的Firebase數據庫中的數據執行簡單的查詢。「

https://www.firebase.com/docs/ios/guide/retrieving-data.html


SOLUTION:

使用完成處理。這是爲了這個。不要在您的請求中使用else聲明。這不是您使用Firebase的方式。

相關問題