Итак, я строил эту функцию getQuestionValues()
, чтобы извлекать и возвращать массив информации, извлеченной на базе Firebase.И это работает до определенного момента.Функция правильно выбирает данные из базы данных и сохраняет их в массиве.Я знаю это, потому что, когда я печатаю массив сразу после добавления последнего элемента, он возвращает ожидаемый результат.
override func viewDidLoad() {
super.viewDidLoad()
if let nav = self.navigationController {
nav.isToolbarHidden = false
}
nextPath = sortNextQuestion()
getQuestionValues(statementPath: nextPath[0], alternativeAPath: nextPath[1], alternativeBPath: nextPath[2], alternativeCPath: nextPath[3], alternativeDPath: nextPath[4], correctPath: nextPath[5])
dispatchGroup.notify(queue: .main){
print("nextquestion is gonna be:")
print(self.nextQuestion)
}
}
Функция, которую я построил:
func getQuestionValues(statementPath: String, alternativeAPath: String, alternativeBPath: String, alternativeCPath: String, alternativeDPath: String, correctPath: String){
print("entering dispatch group")
self.dispatchGroup.enter()
let refStatement = Database.database().reference(withPath: statementPath)
let refOptionA = Database.database().reference(withPath: alternativeAPath)
let refOptionB = Database.database().reference(withPath: alternativeBPath)
let refOptionC = Database.database().reference(withPath: alternativeCPath)
let refOptionD = Database.database().reference(withPath: alternativeDPath)
let refCorrect = Database.database().reference(withPath: correctPath)
refStatement.observe(.value) { (snapshot) in
print(snapshot)
let statement = snapshot.value as? String
self.questionFetched.append(statement!)
}
//fetching alternativeA
refOptionA.observe(.value) { (snapshot) in
let optionA = snapshot.value as? String
self.questionFetched.append(optionA!)
}
//fetching alternativeB
refOptionB.observe(.value) { (snapshot) in
let optionB = snapshot.value as? String
self.questionFetched.append(optionB!)
}
//fetching alternativeC
refOptionC.observe(.value) { (snapshot) in
let optionC = snapshot.value as? String
self.questionFetched.append(optionC!)
}
//fetching alternativeD
refOptionD.observe(.value) { (snapshot) in
let optionD = snapshot.value as? String
self.questionFetched.append(optionD!)
}
//fetching correctAnswer
refCorrect.observe(.value) { (snapshot) in
let correct = snapshot.value as? Int
let correctString = String(correct!)
self.questionFetched.append(correctString)
//left this print here just to understand that the function actually works, it is just delayed
print(self.questionFetched)
}
print("new question fetched inside function:")
print(self.questionFetched)
print("leaving dispatch")
self.dispatchGroup.leave()
}
Однако я неполучить желаемый результат в ожидаемое время.Я хотел бы использовать его результат на viewDidLoad()
, но кажется, что фрагмент кода внутри dispatchGroup.notify(queue: .main)
не ожидает загрузки функции getQuestionValues()
, как я и собирался.
Что может происходить