2016-02-20 6 views
1

Я создаю приложение для викторины для iOS с использованием Swift и используя Firebase в качестве бэкэнд. Я хочу иметь возможность сделать запрос, который выбирает 10 случайных вопросов и возвращает их.Swift + Firebase: случайный выбор группы объектов с использованием запроса на сервер

enter image description here

+0

Firebase не имеет на сторону сервера 'случайным образом()' операции, так что не будет возможно. Некоторое время было обсуждено это на https://groups.google.com/forum/#!msg/firebase-talk/C-mILPmGpbI/0kTAopALiXsJ –

+0

@FrankvanPuffelen проблема с тем, что это сообщение, что я планирую у вас много вопросов, и время, затрачиваемое на получение вопросов, а затем на случай случайного выбора, будет только дольше, так как есть больше вопросов. –

+0

Вместо одного раза получить 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 правил (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) 
    }) 
} 

Фактический быстр код может быть испорчен и для firebase конкретного кода, посмотрите на Ios documentation

+0

@ AndréKoolI просто проверил это, у меня есть 2 ошибки. Я добавлю скриншот ошибок к моему оригинальному сообщению. –

+0

Я обновил цикл for в своем ответе на надежный верный код, это должно решить первую ошибку. Вторая ошибка вызвана тем, что вы добавили дополнительную скобку в конец, чтобы просто удалить ее. Помните, что я написал образец кода, просто скопировал и прошёл, это даст вам некоторые ошибки. Вы по крайней мере должны будете изменить ссылку на firebase, чтобы соответствовать вашей собственной частоте. –

+0

@ AndréKooll Спасибо, что сейчас работает! –

 Смежные вопросы

  • Нет связанных вопросов^_^