【发布时间】:2018-06-10 19:43:50
【问题描述】:
我正在尝试编写一个在 Firebase 中注册新用户的自定义函数。我在一个名为 DatabaseManager 的类中导入了 Firebase。在那里,我管理所有数据库交互。在这个类中,我想要一个自定义函数来添加用户,这会引发所有 Firebase 错误。这样我就可以在 ViewController 类中使用该函数,我可以在其中捕获错误并显示警报。 但是,我似乎无法使该功能正常工作,而且我不确定自己做错了什么。
这是我的功能:
enum createAccountError : Error{
case emailInUse, weakPassword, networkError, unknownError
}
//Mark: create a user profile
///create account with email, password, username, phoneNumber, birthDate, name
func createAccount(_ userModel: UserModel, _ password: String?, completion: @escaping (_ inner: ()throws -> Bool)->()) {
Auth.auth().createUser(withEmail: userModel.email!, password: password!, completion: {(user, error) in
if let error = error {
if let errCode = AuthErrorCode(rawValue: error._code) {
switch errCode {
case .emailAlreadyInUse:
completion({throw createAccountError.emailInUse})
case .weakPassword:
completion({throw createAccountError.weakPassword})
case .networkError:
completion({throw createAccountError.networkError})
default:
completion({throw createAccountError.unknownError})
}
}
return
} else {
completion({return true})
}
})
}
这是我尝试使用它的方法:
DatabaseManager.system.createAccount(user, password) { (( inner: ()throws -> Bool)->()) in
do{
let result = try inner()
} catch .emailInUse{
//show alert
}
}
【问题讨论】:
-
请更新您的问题(不要发布 cmets),以清楚地解释您发布的代码存在哪些问题。
-
maddy,不确定您的意思,我只想问如何使用函数。我使用它的方式不起作用。
-
“不起作用”不是一个有用的陈述。它在哪些方面不完全有效?
标签: swift escaping closures try-catch throw