[英]Problems With Error Casting In Swift
不确定这是错误还是预期功能。
要在Firebase中使用电子邮件和密码创建用户,我一直在使用以下代码:
FIRAuth.auth()?.signIn(withEmail: email, password: password) { (user, error) in
if let error = error {
guard let error = error as? FIRAuthErrorCode else { return } // ALWAYS FAILS
...code...
}
...code...
}
该方法的完成处理程序中的error参数不能转换为FIRAuthErrorCode
; 它总是失败。 这是一个错误,还是预期的行为?
编辑:我知道可以使用错误代码来区分不同类型的FIRAuthErrorCode
错误。 它只是不可读,并且完成处理程序中的error参数不是FIRAuthErrorCode
类型也没有多大意义。 可以在这里找到FIRAuthErrorCode
的情况和错误代码。
您是否尝试过使用guard let error = error as! FIRAuthErrorCode else { return }
guard let error = error as! FIRAuthErrorCode else { return }
强制转换并检查return是否为nil?
您应检查firebase中signIn方法的文档,以检查此方法可以发送的所有可能的错误类型,然后在代码中的保护块中检查这些类型的错误。
试试这个,这是我登录的方式,它看起来很棒。
FIRAuth.auth()?.signIn(withEmail: EmailField.text!, password: PasswordField.text!, completion: { user, error in
if error == nil {
print("Successfully Logged IN \(user!)")
self.performSegue(withIdentifier: "Login", sender: self)
}
})
我只是检查登录过程是否没有错误,然后执行我的segue。
与Firebase支持人员联系后,他们说在完成处理程序中传回的错误只是Error
对象。 它们不是FIRAuthErrorCode
对象。 要测试各种FIRAuthErrorCode
情况,必须执行以下操作:
FIRAuth.auth()?.signIn(withEmail: email, password: password) { (user, error) in
if let error = error {
guard let error = FIRAuthErrorCode(rawValue: error._code) else {
fatalError("This should never be executed")
}
switch error {
case .errorCodeInvalidEmail: ...
case .errorCodeWrongPassword: ...
default: ...
}
...code...
}
...code...
}
^这样可以保持可读性并使错误处理更加直观。 并且,无需进行错误投射!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.