[英]iOS Swift 3, Alamorfire: Wait for all image uploading to be finished before calling a function
[英]Wait before calling a function in Swift
我正在将 Firestore 用于我的 iOS 应用程序项目,并且我想向用户添加一些额外的数据,因此我创建了一个名为“配置文件”的集合,我希望每个文档都命名为Auth.auth().currentUser.uid
以便我稍后可以为每个用户检索数据(或者有更好的方法吗?)。
Firestore 中的这些文档是在用户注册新帐户时创建的:
func createUser() {
db.collection("profiles").document("\(currentUser?.uid)").setData([
"name": name,
"surname": surname,
"email": email,
"shelter": isMember == true ? shelters[selectedShelter] : shelters[0],
"photoURL": imageURL ?? "",
"reputation": 0,
"uuid": "\(uuid)"
])
{ err in
if let error = err {
print("Error ading document: \(error)")
} else {
print("Document added")
}
}
}
但是,在调用此函数时(单击“注册”按钮时) , currentUser
不存在,因为它被定义为Auth.auth().currentUser
,因此currentUser.uid
= nil 在我的“配置文件”中"Firestore 中的文档。
在我的注册函数中调用函数 createUser:
func register() {
if self.email != "" {
if self.pass == self.repass {
Auth.auth().createUser(withEmail: self.email, password: self.pass) { (res, err) in
if err != nil {
self.error = err!.localizedDescription
self.alert.toggle()
return
}
// Success registering a new user
viewRouter.currentView = "Home"
DispatchQueue.main.async {
self.createUser()
}
}
}
else {
self.error = "Les mots de passe ne correspondent pas"
self.alert.toggle()
}
}
else {
self.error = "Veuillez remplir tous les champs"
self.alert.toggle()
}
}
我想在调用 createUser 函数之前等待Auth.auth().currentUser
存在。 我尝试使用DispatchQueue.main.async
没有成功。
任何的想法? 或者也许是实现我的目标的更好方法 - 即向每个用户添加更多数据(例如:声誉、住所……)?
感谢您的帮助!
您在做什么是正确的,您实际上可以使用完成处理程序中的res
参数获取新创建的用户。
例子
Auth.auth().createUser(withEmail: self.email, password: self.pass) { (res, err) in
if err != nil {
self.error = err!.localizedDescription
self.alert.toggle()
return
}
// Successfully registered a new user, get the user id
guard let currUserId = res?.user.uid else { return }
// ...
// Maybe add uid as a parameter of createUser
createUser(id: currUserId)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.