2017-11-04 3 views
0

Im haben eine Datenbank wie folgt aus:Erste Liste der Elemente von Feuerbasis schnellen

Database

Der Benutzer wird auf Lieblings der Lage sein, die Plätze. Ich speichere die Favoritenplätze, indem ich die IDs speichere. Ich möchte nur die Favoriten aus der Datenbank mithilfe der IDs abrufen. Ich kann nicht herausfinden, wie das geht. Bitte helfen Sie!

+0

Mögliche Duplikat [Firebase Swift 3 get Liste von Kindern in einem Array] (https://stackoverflow.com/questions/40117849/firebase-swift-3-get-list-of-child-in-a-array) – MQLN

+0

@MacLean Zwei Dinge; Die Antwort in der verknüpften Frage war ein Fix für einen Tippfehler (FDatabase vs FIRDatabase) und noch wichtiger ist die Struktur von Firebase in dieser Frage kein Array, Firebase Arrays sind sequentiell und numerisch (Schlüssel von 0, 1, 2, 3 etc) – Jay

Antwort

0

Sie können dies verwenden, um jede Orts-ID mit Ihren gespeicherten bevorzugten Orts-IDs zu überprüfen.

ref.child("places").observe(.childAdded, with: { (snapshot) in 

    var newItems = [FIRDataSnapshot]() 

    for item in snapshot.children { 

     if let value = (item as! FIRDataSnapshot).value as? String { 
      // might want to do another loop if you have an array of places to check 

      if snapshot.value as? String == "favorite_place_id" { 
      // this is what you want 
      } 

     } 

    } 
}) 
+0

Vielleicht möchten Sie den Code auf diese Antwort überprüfen, da das Lesen von .childAdded jeden Knoten separat zurückgibt und die Kinder werden Info, Moreinfo usw. sein und die Werte werden Infotext, Infotexte sein, von denen keiner die Orts-ID sein wird (der Schlüssel, was das OP wollte) – Jay

+0

ich denke, das ist was ich will! Aber ich kann nicht herausfinden, wo die Schleife und wie man es schreibt .. – user1953498

+0

@ user1953498 Dieser Code ist keine Antwort auf Ihre Frage (es sei denn, ich missverstanden die Frage/unklar). Im Allgemeinen ist das Schleifen von Knoten eine ziemlich ineffiziente Art, nach Daten zu suchen, nach denen Sie suchen. – Jay

1

Es scheint, Sie fragen, wie einen Platz zu erhalten, indem es ID ist

(Swift 4, Firebase 4)

die favorited Orte aus der Datenbank erhalten, indem die IDs mit

Dieses an einem einzigen Ort lesen, placeId1

let placeRef = self.ref.child("places").child("placeId1") 

placeRef.observeSingleEvent(of: .value, with: { snapshot in 
    let placeDict = snapshot.value as! [String: Any] 
    let info = placeDict["info"] as! String 
    let moreInfo = placeDict["moreinfo"] as! String 
    print(info, moreinfo) 
}) 

diese alle Orte werden gelesen (auf einmal) und

let allPlaces = self.ref.child("places") 

    allPlaces.observeSingleEvent(of: .value, with: { snapshot in 
     for child in snapshot.children { 
      let snap = child as! DataSnapshot 
      let placeDict = snap.value as! [String: Any] 
      let info = placeDict["info"] as! String 
      let moreInfo = placeDict["moreinfo"] as! String 
      print(info, moreInfo) 
     } 
    }) 

Notiz über sie iterieren. Self.ref = Database.database() Referenz()

+0

was ist wenn ich eine Liste als Attribut neben info und moreinfo habe, wie kann ich das lesen? – Edu

+0

@Edu Fragen Sie; Was ist, wenn der Schlüssel von * info * einen Wert hat, der eine Liste von Kindknoten darstellt? d. h. places/placeId1/info/child_0: value_0 und places/placeId1/info/child_1: value_0 usw. Wenn dies der Fall ist, können Informationen als Momentaufnahme behandelt werden, z. Lassen Sie infoSnap = snapshot.childSnapshot (fürPfad: "info"). Dann kann der Wert von infoSnap über die untergeordneten Knoten als Wörterbuch iteriert oder gelesen werden. – Jay

Verwandte Themen