Большинство API Firebase являются асинхронными - это связано с тем, что большинство из них связаны с сетевым вызовом, который намного медленнее, чем код выполняется на вашем телефоне!
Итак, ваш метод getUser
потребуется переписать так:
import FirebaseFirestoreSwift
func getUser(userId: String, completion: @escaping (_ user: AppUser?, _ error: Error?) -> Void) {
db.collection("users").document(userId).getDocument { (snapshot, error) in
let user = try? snapshot?.data(as: AppUser.self)
completion(user, error)
}
}
Примечание: чтобы использовать поддержку Codable Firestore, вам нужно будет добавить pod 'FirebaseFirestoreSwift'
к вашему Podfile
Что касается того, как (и когда) для извлечения пользователя, это в значительной степени зависит от того, является ли ProfileHeadingView
частью представления списка (или выполняется переход из представления списка), или нет.
Если это является частью в виде списка, я бы рекомендовал извлекать всех пользователей одновременно - вы можете использовать прослушиватель снимков для прослушивания любых обновлений в коллекции пользователей или выполнить однократную выборку для чтения пользователей один раз .
Затем из представления списка передайте соответствующий объект user
в ProfileHeadingView
.