2017-07-19 3 views
1

Ich bin neu bei Firebase, und ich versuche eine App zu erstellen, wo es ein zufälliges Benutzerprofil zeigt, wenn Benutzer die App starten (ähnlich wie Tinder).Firebase iOS Swift: Wie wählt man ein zufälliges userProfile?

Nach ein paar Stunden Tests Zeug, fand ich eine Lösung, es funktioniert, aber wenn sich falsch anfühlt! Ich rufe einen Beobachter in einen anderen Beobachter, ist das gut? zwei Verbindungen? Ich weiß es nicht, aber es fühlt sich schlecht an! aber ich kann keine andere Lösung finden.

Ist mein Code gut oder schlecht? Wenn das nicht stimmt, kann mir jemand einen guten Rat geben, wie es geht?

My Firebase Datenbankstruktur:

"profiles": { 
    "1": { 
     "name": "John Doe", 
     "age": "36", 
     "location": "Los Angeles", 
     "gender": "male", 
    }, 
    "2": { ... }, 
    "3": { ... } 
    }, 

mein Swift IOS-Code Firebase

var profilesRef: DatabaseReference! 
let profilesRef = Database.database().reference().child("profiles") 

profilesRef.observe(.value, with: { (snapshot) in 

    let profilesCount = snapshot.childrenCount 
    let diceRoll : String = String(arc4random_uniform(UInt32(postsCount))) 

    profilesRef.child(diceRoll).observeSingleEvent(of: .value, with: { (snapshot) in 
     if let profileDict = snapshot.value { 
      let profile = Profile(profileData: profileDict as! Dictionary<String, AnyObject>) 
      print(profile.age) 
     } 
    }) 
}) 

Es funktioniert, aber es fühlt sich falsch an.

Antwort

0

Es ist nicht nötig, ein zweites Mal aus der Datenbank zu ziehen. Sie können den Snapshot, den Sie vom ersten erhalten haben, erstellen, den Wert in einem Wörterbuch speichern und dann den Wert für den Schlüssel "Diceroll" abrufen. Sie haben die Daten bereits einmal abgerufen und müssen dies nicht erneut tun.

Auch eine Randnotiz, es ist keine gute Praxis, Profile unter einer Nummer zu speichern, denn wenn jemand sein Profil löscht oder zwei Personen gleichzeitig ein Profil erstellen, wird es Diskrepanzen in den Daten geben. Ich schlage vor, in "childByAutoID" zu suchen, und dann können Sie die Benutzerauswahl randomisieren, indem Sie sie in einem Array speichern und einen zufälligen Index auswählen.

Lassen Sie mich wissen, wenn Sie Fragen haben!

+0

danke für deine Antwort, Nshweky ich verstehe nicht, wenn ich meine zweite Verbindung nicht mache, wie bekomme ich mein einzelnes Profil? Können Sie mir mit dem Code helfen pls ????? –

+0

Beim ersten Aufruf der Datenbank hat der Snapshot alle Profile zurückgegeben. Wenn Sie den snapshot.value protokollieren, sollten Sie "1" erhalten: { "Name": "John Doe", "Alter": "36", "Standort": "Los Angeles", "Geschlecht": " männlich ", }, " 2 ": {...}, " 3 ": {...} usw. – Nshweky

+0

Versuchen Sie, den snapshot.value (vom ersten Datenbankaufruf) zu protokollieren, wenn Sie dies nicht tun verstehen. – Nshweky

Verwandte Themen