2017-03-19 2 views
0

Firebaseデータベース内の子をループしてネストされたキーを取得しようとしています。Swiftを使用してFirebaseのネストされたスナップショットの子を反復します。

私のデータベースは、このように構成されています

"Users" : { 
"Username" : { 
    "Favorites" : { 
    "Location" : { 
     "Latitude" : 123, 
     "LocationName" : "San Francisco", 
     "Longitude" : 123 
    }, 
    "Location2" : { 
     "Latitude" : 123, 
     "LocationName" : "London", 
     "Longitude" : 123 
    } 
    } 
} 
} 

私は「にLocationName」キーのすべてをプリントアウトしようとすると、このキーの1つのインスタンスを印刷することができていますが、をループすることはできませんよとこのキーのすべてのインスタンスを出力します。

私のforループのどこが間違っているのか分かりませんか?

私が扱っているコードは以下の通りです。

FIRApp.configure() 

    let databaseRef = FIRDatabase.database().reference().child("Users").child("Username").child("Favorites") 


    let databaseHandle = databaseRef.observe(.value, with: { (snapshot) in 
     for item in snapshot.children { 

      if let dbLocation = snapshot.childSnapshot(forPath: "LocationName") as? String { 

        print (dbLocation) 
      } 

      print(item) 

     } 

    }) 

私はSwiftには非常に新しく、Firebaseにはさらに新しいので、どんな助けでも大歓迎です!

+0

あなたは間違ったFirebaseデータベース構造を持っていると思います。火災ベースでは、データベースは重要な価値があります。以下の例をご覧ください:http://stackoverflow.com/a/16423316/743923 –

+0

あなたの質問にJSONツリーの画像が含まれています。実際のJSONをテキストとして置き換えてください。このテキストは[Firebaseデータベースコンソール](https://console.firebase.google.com/project/_/database/data/)の[Export JSON]リンクをクリックすることで簡単に取得できます。 。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

+0

@FrankvanPuffelen、私にそのことを教えてくれてありがとう!私が提案したようにJSONテキストを追加しました。 – LSteele

答えて

0

あなたのコードに問題snapshotことはお気に入りノードを指している - 代わりにそこにLocationNameを探して、あなたは場所子ノードのそれぞれの内側にそれを探してください。したがって、ループは次のようになります。

let databaseHandle = databaseRef.observe(.value, with: { snapshot in 
    for child in snapshot.children { 
     let childSnapshot = snapshot.childSnapshotForPath(child.key) 
     if let dbLocation = childSnapshot.value["LocationName"] as? String { 
      print(dbLocation) 
     } 
    } 
}) 
関連する問題