从“错误”转换为不相关类型“AuthErrorCode”总是失败
Posted
技术标签:
【中文标题】从“错误”转换为不相关类型“AuthErrorCode”总是失败【英文标题】:Cast from 'Error' to unrelated type 'AuthErrorCode' always fails 【发布时间】:2021-03-01 09:54:37 【问题描述】:我尝试从 FirebaseAuth 获取错误代码并显示与错误代码相关的内容。我尝试用开关来做到这一点:
Auth.auth().signIn(withEmail: email, password: password) (user, error) in
if let error = error as? AuthErrorCode
switch error
case .emailAlreadyInUse:
Utility.showAlertView(with: "Email already used", and: "Please choose a different email adress", in: self)
case .invalidEmail:
Utility.showAlertView(with: "Email is invalid", and: "Please enter a valid email", in: self)
case .weakPassword:
Utility.showAlertView(with: "Weak Password", and: "Please Choose a longer Password", in: self)
default:
break
else
但我收到警告:
从 'Error' 转换为不相关的类型 'AuthErrorCode' 总是失败
我不知道该怎么办。 谢谢你的时间,Boothosh
【问题讨论】:
你检查过这个***.com/questions/45339861/… 吗? 我已经检查过了,但我不明白我的代码有什么问题... :( 什么是errror
(有四个r
)? ;-)
是的,这是一个错误,但我在源代码中写的一切都很好
【参考方案1】:
根据Firebase documentation AuthErrorCode
是 int enum,因此您不能将 Error 投射到其中。相反,您需要使用错误代码并尝试使用它创建AuthErrorCode
的实例:
let code = (error as NSError).code
if let code = AuthErrorCode(rawValue: code)
switch code
case .emailAlreadyInUse:
Utility.showAlertView(with: "Email already used", and: "Please choose a different email adress", in: self)
case .invalidEmail:
Utility.showAlertView(with: "Email is invalid", and: "Please enter a valid email", in: self)
case .weakPassword:
Utility.showAlertView(with: "Weak Password", and: "Please Choose a longer Password", in: self)
default:
break
更新
对于可选错误,您需要在使用其代码之前对其进行解包:
if let err = error as NSError?, let code = AuthErrorCode(rawValue: err.code)
switch code
...
【讨论】:
好的,我试过了,结果如下:我收到一个错误,上面写着“'错误?'不能转换为 'NSError';你的意思是使用 'as!'强迫沮丧?”感谢您的时间 Boothosh @Boothosh 不,我不建议强制向下转换。我将针对可选错误更新我的答案【参考方案2】:AuthErrorCode
是一个以 Int 作为关联类型的枚举,因此您不能将错误变量直接转换为它。而是将错误转换为 NSError 并将 NSError 错误代码与枚举进行比较。
if let error = error as? NSError, errorCode = AuthErrorCode(rawValue: error.code)
switch errorCode
case .emailAlreadyInUse:
//...
case .errorCodeInvalidEmail:
//...
// more case
【讨论】:
以上是关于从“错误”转换为不相关类型“AuthErrorCode”总是失败的主要内容,如果未能解决你的问题,请参考以下文章
收到一条错误消息,提示“从“字符串”转换为不相关的类型 NSDictionary 总是失败”。我得到一个线程 1:EXC_BAD_INSTRUCTION
从 'Result<AnyObject>' 转换为不相关类型 'NSArray' 总是失败
从 '(NSNumber) -> NSNumber' 转换为不相关类型 '(Any) -> Any' 总是失败
从“NSPersistentStoreResult”转换为不相关类型“[entity]”总是失败