2016-08-04 9 views
2

ノードにキー/値(TestKey/TestValue)が存在するかどうかを確認しようとしていますが、Aを実行していない場合はBを返します。Firebaseのスナップショットで制御フローでNilを使用するにはどうすればいいですか? (スウィフト)

この類似のスレッドこれについてStackOverflowについては、私のために動作するように思われた解決策はありませんでした。Checking if Firebase snapshot is equal to nil in Swift

私は既にTestKey/TestValueキーペアが挿入されたデータベースをセットアップしました。印刷テストは結果がnilであることを示している場合でも、

var ref: FIRDatabaseReference! 
    ref = FIRDatabase.database().reference() 

    ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in 

     //A print test to see stored value before control flow 
     print(snapshot.value!["TestKey"]) //returns TestValue 
     print(snapshot.value!["NilKey"]) //returns nil 

     // I change the value from TestKey <-> NilKey here to test the control flow 
     if snapshot.value!["TestKey"] != nil { 
      print("Exists currently") 
     } else { 
      print("Does not exist currently") 
     } 

    }) { (error) in 
     print(error.localizedDescription) 
    } 

問題は、「A」が実行されていることである: はここに私のコードです。

私は== nilで操作を逆転しようとしましたが、 "is NSNull"も試みました。

コントロールフローが正常に動作しないようです。たぶん、次のいずれかが犯人であるが、私はわからないよ:オブザーバー(?私もobserveSingleEventTypeのために必要なのです)

  • optionals
  • とは何かを削除しないobservesSingleEventOfType
  • と持続性の

    1. 相互作用非同期呼び出し
    2. とそのfirebase店舗NSAnyObjects
    0123事実とは何かを行うに
  • 何か最終的には、キーと値のペアが存在するかどうか、存在するかどうかを確認することです。存在しない場合は何もしないでください:作成してください。 何が間違っているのですか?このコントロールフローをどのように機能させることができますか?

  • 答えて

    3

    私は解決策を見つけたので、以前の既存の質問(Checking if Firebase snapshot is equal to nil in Swift)から実際にこの回答(https://stackoverflow.com/a/35682760/6515861)として投稿されました。

    これを動作させるには、リファレンス自体にTestKeyを入力し、snapshot.value( "TestKey")から参照を削除してから、 "is Null"を使用します。ここで

    は、作業コードです:

    // Database already exists with "TestKey"/"TestValue" 
    
    var ref: FIRDatabaseReference! 
    ref = FIRDatabase.database().reference() 
    
        // replace "TestKey" with another string to test for nil 
        ref.child("TestKey").observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
    
        if snapshot.value is NSNull { 
         print("Does not exist currently") 
        } else { 
         print("Exists currently") 
        } 
    
    
        }) { (error) in 
         print(error.localizedDescription) 
        } 
    

    私はこの解決策を見つけたが、誰もが、まだ元の質問に答えることを望んでいるならば、私はそれが他の方法を動作しない理由を知りたいと思って幸せです。

    関連する問題