У меня есть два разных класса данных в базе данных Firebase, которые мне нужно объединить в один класс для определенного фида в моем приложении. Поэтому я использовал замыкания для пошагового процесса получения информации из базы данных, манипулирования ею и объединения в один массив. Моя функция, которая получает все данные, работает нормально, но мне нужно, чтобы эта функция вызывалась первой, а затем происходили x, y и z ... проблема в том, что сначала вызывается неправильная функция, хотя я пытаюсь использовать обработчики завершения. Пожалуйста, помогите, если я делаю что-то не так. Заранее спасибо.
Вот функция, которую нужно сначала запустить, чтобы получить все данные из Firebase:
func getUserLeagues(_ completion: ()->()) {
userLeagues.getGolferLeagues {
print("Step 1")
for league in self.userLeagues.leagues {
print("FOR IN League ID: \(league.leagueID)")
self.getLeagueInfo(leagueID: league.leagueID, completion: {
print("Step 2")
})
}
print("League Info Code Run")
}
completion()
}
//Get league Info
func getLeagueInfo(leagueID: String, completion: @escaping ()->()) {
REF_leagueInfo.child(leagueID).observe(.value, with: {(snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
self.leagueInfo.removeAll()
for snap in snapshot {
print("SNAP: \(snap)")
if let leagueDict = snap.value as? Dictionary<String, Any> {
let key = snap.key
let league = LeagueInfo(leagueID: key, leagueDict: leagueDict)
self.leagueInfo.append(league)
}
}
}
completion()
})
}
}
А вот и функция, которая вызывается при загрузке VC и требует, чтобы первая функция вызывалась первой, прежде чем что-либо еще можно будет запустить.
func getSummaryLeaderboard(completion: @escaping ()->()) {
self.summaryLeaderBoards.removeAll()
print("Get Summary Leaderboard called")
leagueInfo.getUserLeagues {
print("Step 3")
print("League Count: \(self.userLeagues.leagues.count)")
for league in self.userLeagues.leagues {
print("League ID: \(league.leagueID)")
self.leagueInfo.getLeagueInfo(leagueID: league.leagueID, completion: {
let leagueInfoIndex = self.leagueInfo.leagueInfo[0]
self.leagueEndDate = leagueInfoIndex.endDate
print("league end date: \(self.leagueEndDate)")
self.leagueImg = leagueInfoIndex.leagueImage
print("league img: \(self.leagueImg)")
self.leagueName = leagueInfoIndex.leagueName
print("league Name: \(self.leagueName)")
self.minRounds = leagueInfoIndex.leagueMinRounds
print("league min rounds: \(self.minRounds)")
self.leagueLeaderScore = leagueInfoIndex.leaderPardieScore
print("league leader score: \(self.leagueLeaderScore)")
print("League info run")
})
self.leagueMembers.getLeagueMembers(leagueID: league.leagueID, completion: {
print("GET LEAGUE MEMBERS RUN")
self.roundsRemaining = self.fillInRoundsRemaing(minRounds: self.minRounds, roundsPlayed: self.leagueMembers.getUserRounds(userID: currentUserKey))
print("user rounds remaining: \(self.roundsRemaining)")
self.userPosition = self.getCurrentUserPosition(userID: currentUserKey)
print("user position: \(self.userPosition)")
self.roundsPlayed = self.leagueMembers.getUserRounds(userID: currentUserKey)
print("user rounds played: \(self.roundsPlayed)")
self.totalMembers = self.leagueMembers.leagueMembers.count
print("user total members: \(self.totalMembers)")
self.userWinnings = self.getCurrentUserWinnings(userID: currentUserKey)
print("USER WINNINGS: \(self.userWinnings)")
self.userPardieScore = self.leagueMembers.getUserPardieScore(userID: currentUserKey)
print("user pardie Score: \(self.userPardieScore)")
let newSummaryLeaderboard = SummaryLeaderboard(leagueEndDate: self.leagueEndDate, roundsRemaining: self.roundsRemaining, leagueImg: self.leagueImg, leagueName: self.leagueName, userPosition: self.userPosition, leagueLeaderScore: self.leagueLeaderScore, userWinnings: self.userWinnings, roundsPlayed: self.roundsPlayed, totalMembers: self.totalMembers, userPardieScore: self.userPardieScore)
self.summaryLeaderBoards.append(newSummaryLeaderboard)
completion()
})
}
}
Вы увидите мои комментарии, которые говорят Шаг 1, Шаг 2 и Шаг 3 ... Очевидно, мне нужно, чтобы они запустили 1 2 3 ... Сейчас они запускают 3,1,2, и я не могу понять, почему ..
Еще раз спасибо! Это сводит меня с ума уже несколько дней.