getDocument
- это асинхронный метод с закрытием обратного вызова, который не имеет возврата, поэтому вы не можете вернуться из него, вместо этого вы должны применить результаты где-нибудь, например. в собственности
Таким образом, решение может быть следующим:
var username: String = ""
// ... other your code
func grabUsername () { // << async, no immediate return
let uid = Auth.auth().currentUser?.uid
let database = Firestore.firestore().collection("Users").document(uid!)
database.getDocument { (docSnapshot, error) in
guard let docSnapshot = docSnapshot, docSnapshot.exists else {return}
let mydata = docSnapshot.data()
let username = mydata!["Username"] as? String ?? ""
DispatchQueue.main.async {
self.username = username // << store result
}
}
}