Я создаю приложение для викторины для iOS с использованием Swift и используя Firebase в качестве бэкэнд. Я хочу иметь возможность сделать запрос, который выбирает 10 случайных вопросов и возвращает их.Swift + Firebase: случайный выбор группы объектов с использованием запроса на сервер
ответ
Прежде всего моего ответа вам нужно дать на один вопрос, значение вроде этого:
{
"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
@ AndréKoolI просто проверил это, у меня есть 2 ошибки. Я добавлю скриншот ошибок к моему оригинальному сообщению. –
Я обновил цикл for в своем ответе на надежный верный код, это должно решить первую ошибку. Вторая ошибка вызвана тем, что вы добавили дополнительную скобку в конец, чтобы просто удалить ее. Помните, что я написал образец кода, просто скопировал и прошёл, это даст вам некоторые ошибки. Вы по крайней мере должны будете изменить ссылку на firebase, чтобы соответствовать вашей собственной частоте. –
@ AndréKooll Спасибо, что сейчас работает! –
Firebase не имеет на сторону сервера 'случайным образом()' операции, так что не будет возможно. Некоторое время было обсуждено это на https://groups.google.com/forum/#!msg/firebase-talk/C-mILPmGpbI/0kTAopALiXsJ –
@FrankvanPuffelen проблема с тем, что это сообщение, что я планирую у вас много вопросов, и время, затрачиваемое на получение вопросов, а затем на случай случайного выбора, будет только дольше, так как есть больше вопросов. –
Вместо одного раза получить 10 вопросов, вы могли бы сделать десять раз получить 1 вопрос. –