2016-02-20 58 views
1

我正在使用Swift爲iOS創建測驗應用程序,並將Firebase用作後端。我希望能夠提出一個查詢,挑選10個隨機問題並將其返回。Swift + Firebase:使用查詢向服務器隨機挑選一組對象

enter image description here

+0

火力地堡沒有服務器端'隨機()'操作,這樣就不會成爲可能。在https://groups.google.com/forum/#!msg/firebase-talk/C-mILPmGpbI/0kTAopALiXsJ –

+0

@FrankvanPuffelen上,有一段體面的討論關於這個帖子sujests的問題是我計劃有很多問題,並且檢索問題並隨後挑選一些問題所需的時間只會隨着問題的增多而變長。 –

+0

而不是一次獲得10個問題,你可以做10次得到1個問題。 –

回答

3

一切爲我的答案,你需要給每一個問題像這樣的價值首先:

{ 
     "question1": { 
     "question" : "Do you know swift", 
     "answer" : "Nope", 
     "value": 1 
     }, 
     "question2": { 
     "question" : "Do you know firebase", 
     "answer" : "A bit", 
     "value" : 2 
     } 
    } 

之後,我們建議在你的火力規則(firebase docs)這樣添加一個索引:

{ 
     "rules": { 
     "questions": { 
      ".indexOn": ["value"] 
     } 
     } 
    } 

接下來是迅速的部分:

//Use a for loop to get 10 questions 
for _ in 1...10{ 
    //generate a random number between 1 and the amount of questions you have 
    var randomNumber = Int(arc4random_uniform(amountOfQuestions - 1)) + 1 

    //The reference to your questions in firebase (this is an example from firebase itself) 
    let ref = Firebase(url: "https://dinosaur-facts.firebaseio.com/dinosaurs") 
    //Order the questions on their value and get the one that has the random value 
    ref.queryOrderedByChild("value").queryEqualToValue(randomNumber) 
    .observeEventType(.ChildAdded, withBlock: { 
     snapshot in 
     //Do something with the question 
     println(snapshot.key) 
    }) 
} 

實際SWIFT代碼可能存在缺陷,並針對具體的火力點代碼看看Ios documentation

+0

@AndréKoolI剛剛檢查了這個,我有2個錯誤。我會將錯誤的屏幕截圖添加到我原來的帖子中。 –

+0

我在我的答案中更新了for循環,希望能夠更正swift代碼,這應該解決第一個錯誤,第二個錯誤是因爲您在末尾添加了一個額外的括號而引起的,因此請將其刪除。請記住,我寫的示例代碼,只是複製和過去它會給你一些錯誤。你至少必須改變對firebase的引用來匹配你自己的frebase。 –

+0

@AndréKooll謝謝,現在似乎工作! –