2017-07-19 55 views
1

我是Firebase的新手,我正嘗試構建一個應用程序,其中顯示用戶啓動應用程序時的隨機用戶配置文件(類似Tinder)。Firebase iOS Swift:如何挑選隨機userProfile?

經過幾個小時的測試,我找到了一個解決方案,但是如果感覺不對!我打電話給另一位觀察員的觀察員,這是否好?兩個連接?我不知道,但感覺很糟糕!但我找不到另一種解決方案。

我的代碼好壞嗎?如果不正確可以給我一些很好的建議如何做到這一點?

我的火力數據庫結構:

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

我斯威夫特IOS火力地堡代碼

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

它的工作原理,但感覺不對。

回答

0

有沒有必要再從數據庫中拉第二次。你可以做的就是把你從第一個接收到的快照,存儲在一個字典中,然後得到鍵「diceroll」的值。 您已經將數據提取一次,無需再次執行。

另外,一個附註,將配置文件存儲在一個數字下是不好的做法,因爲如果有人刪除了他們的配置文件,或者兩個人同時創建了配置文件,那麼數據中會有差異。我建議查看「childByAutoID」,然後可以通過將用戶選擇存儲在數組中並選擇隨機索引來隨機化用戶選擇。

讓我知道你是否有問題!

+0

感謝您的回覆,Nshweky 我不明白如果我不讓我的第二個連接,我如何得到我的單個配置文件? 你能幫助我的代碼pls ????? –

+0

當您第一次調用數據庫時,快照返回了所有配置文件。如果您登錄snapshot.value,您應該獲得「1」:「姓名」:「John Doe」, 「age」:「36」, 「location」:「Los Angeles」, 「gender」:「男性「, }, 」2「:{...}, 」3「:{...} etc ... – Nshweky

+0

嘗試記錄snapshot.value(來自第一個數據庫調用),如果您不理解。 – Nshweky