Hallo,
bin neu hier und auch recht neu in der Swift Welt.
Ich arbeite gerade an einer App bei der es um Gäste Verwaltung geht.
Jeder Gast der angelegt wird, hat eine Referenz zum User der ihn angelegt hat (user ID)
Ds Gast Model sieht so aus:
das User Model sieht so aus:
in einer View möchte ich nun den Gast nebst seinem Contact (der User der Ihn angelegt hat) anzeigen.
Also hole ich mir alle Gäste aus dem Firestore:
Alles anzeigen
und im ViewModel dann:
Alles anzeigen
und hier noch die getUsersName() Funktion:
Alles anzeigen
wenn ich im obigen code in Zeile 10 ein print Statement setze und den Inhalt von name abfrage steht genau drin was ich haben möchte.
aber im return ist name leer.
was mach ich denn da falsch?
Danke Euch
Grüße
Micha
bin neu hier und auch recht neu in der Swift Welt.
Ich arbeite gerade an einer App bei der es um Gäste Verwaltung geht.
Jeder Gast der angelegt wird, hat eine Referenz zum User der ihn angelegt hat (user ID)
Ds Gast Model sieht so aus:
das User Model sieht so aus:
in einer View möchte ich nun den Gast nebst seinem Contact (der User der Ihn angelegt hat) anzeigen.
Also hole ich mir alle Gäste aus dem Firestore:
Quellcode
- func getAll(completion: @escaping ([Guest]) -> Void) {
- guard let token = UserDefaults.standard.string(forKey: "companyToken") else { return }
- db.document(token)
- .collection("guests")
- .order(by: "created", descending: false)
- .getDocuments { snapshot, _ in
- guard let documents = snapshot?.documents else { return }
- let guests = documents.compactMap({try? $0.data(as: Guest.self)})
- completion(guests)
- }
- }
und im ViewModel dann:
Quellcode
- @Published var guests = [GuestViewModel]()
- service.getAll { guests in
- self.guests = guests.map({ GuestViewModel.init(guest: $0, service: self.service) })
- }
- struct GuestViewModel: Identifiable {
- let guest: Guest
- let service: DataServiceProtocol
- var id: String { guest.id ?? "" }
- var fullname: String { guest.fullname }
- var company: String { guest.company }
- var contact: String {
- service.getUsersName(forId: guest.uid)
- }
- }
und hier noch die getUsersName() Funktion:
Quellcode
- func getUsersName(forId id: String) -> String {
- guard let token = UserDefaults.standard.string(forKey: "companyToken") else { return "" }
- var name = ""
- db.document(token)
- .collection("users")
- .document(id)
- .getDocument { document, error in
- guard let document = document, document.exists else { return }
- guard let fieldValue = document.get("fullname") as? String else { return }
- name = fieldValue
- }
- return name
- }
wenn ich im obigen code in Zeile 10 ein print Statement setze und den Inhalt von name abfrage steht genau drin was ich haben möchte.
aber im return ist name leer.
was mach ich denn da falsch?
Danke Euch
Grüße
Micha