繁体   English   中英

在 Swift 中调用函数之前等待

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM