это мой первый раз программирование в Swift / SwiftUI, и я застрял с проблемой в течение последних нескольких недель.
Приложение Я пытаюсь создать приложение, в которое пользователи вводят данные для игры, эти данные сохраняются на их телефоне, и как только ответы становятся доступны в базе данных Firebase, они будет сравнивать с ними и рассчитывать балл.
До сих пор я был в состоянии: - Интегрировать FireBase в приложение iOS - Я был в состоянии запускать списки / циклы foreach для информации, собранной из базы данных
На данный момент Моя проблема заключается в следующем: я пытаюсь загрузить информацию из firebase, а затем использовать эту информацию для сравнения с пользовательскими данными и расчета балла. Когда я делаю это, функция, которая возвращает данные из firebase, возвращает пустой массив.
Функция результатов Firebase
func getResults() {
ref.child("eventResults").observe(DataEventType.value) { (snapshot) in
self.eventResults = []
for child in snapshot.children {
if let snapshot = child as? DataSnapshot,
let event = EventResults(snapshot: snapshot) {
self.eventResults.append(event)
}
}
}
}
Если я запускаю этот код в представлении SwiftUI без вычислений, он извлекает и правильно отображает данные, вот пример представления, в котором работает правильно
import SwiftUI
struct TestView: View {
@ObservedObject var session = FirebaseSession()
var body: some View {
ZStack {
Color.init(red: 221/255, green: 221/255, blue: 221/255)
.edgesIgnoringSafeArea(.all)
VStack {
List{
//
ForEach(self.session.eventResults) { event in
HStack() {
Text(event.name)
.font(.system(size: 30))
Spacer()
Text("\(event.answer)")
.font(.system(size: 30))
}
}
}.frame(width: UIScreen.main.bounds.width*0.9)
}.onAppear() {
self.getFirebaseData()
}
}
}
func getFirebaseData() {
session.getResults()
}
}
Но в другом представлении я пытаюсь вычислить оценку пользователя в фоновом режиме, чтобы обновить профиль пользователя с правильной оценкой, я пробовал различные способы сделать это, но исходный массив всегда получается пустым.
Ниже приведен пример кода, который я пытаюсь запустить
import SwiftUI
import CoreData
struct EventList : View {
@Environment(\.managedObjectContext) var managedObjectContext
@ObservedObject var session = FirebaseSession()
@FetchRequest(entity: UserEvents.entity(),
sortDescriptors: [])
var userEvents: FetchedResults<UserEvents>
var body: some View {
ZStack {
Color.init(red: 221/255, green: 221/255, blue: 221/255)
.edgesIgnoringSafeArea(.all)
VStack {
ScrollView {
VStack(alignment: .leading) {
ForEach(userEvents) { eventVar in
EventCard(eventVar: eventVar)
.cornerRadius(0)
.shadow(color: .black, radius: 5, x: 2, y: 2.0)
.padding(.horizontal)
.frame(width: UIScreen.main.bounds.width)
}
}
}
}
}.onAppear{
self.getFirebaseData()
var testvar2 = self.session.eventResults // is empty
self.calcScores(resultlist: self.session.eventResults)
}
}
//MARK: calculate Scores
func getFirebaseData() {
session.getResults()
}
func calcScores(resultlist: [EventResults]) {
var testcount = resultlist.count // is empty
}
}
Любая помощь или руководство с этим очень ценится, Даниэль