Ios 自定义错误处理程序未按预期返回错误
我们有一组自定义服务器消息,我们会根据设备的语言进行更改。 函数正在返回 错误域=Proyect.ErrorHandler.DatabaseErrors代码=11 null,而不是 错误域=我们的网页代码=11我们在Localizable.strings中拥有的文本 我们像ErrorHandler.checkErrorCodecustomCode一样调用此函数,以将我们在completionHandler中的自定义代码作为错误发送,比如completionHandlernil,ErrorHandler.checkErrorCodecustomCode作为NSError 我尝试将.foundationError添加到案例中,但我得到的表达式类型在没有更多上下文的情况下是不明确的。我遵循了这一点,您的代码具有史诗般的抗干性 首先,您确实需要重构它:Ios 自定义错误处理程序未按预期返回错误,ios,swift,Ios,Swift,我们有一组自定义服务器消息,我们会根据设备的语言进行更改。 函数正在返回 错误域=Proyect.ErrorHandler.DatabaseErrors代码=11 null,而不是 错误域=我们的网页代码=11我们在Localizable.strings中拥有的文本 我们像ErrorHandler.checkErrorCodecustomCode一样调用此函数,以将我们在completionHandler中的自定义代码作为错误发送,比如completionHandlernil,ErrorHand
class ErrorHandler {
public enum DatabaseErrors: Int, Error {
case ok
case incorrectFormat
case userHasNoRights
case doesNotExists
case authError
case serverError
case missingData
case alreadyRegistered
case loadError
case inactive
case updateRequired
case incorrectData
case databaseError
private var domain: String { "ourwebpage" }
private var errorCode: Int { rawValue }
var description: String { NSLocalizedString(String(format: "server_message_%.2d", errorCode), comment: "") }
var foundationError: NSError { NSError(domain: domain, code: errorCode, userInfo: [NSLocalizedDescriptionKey: description]) }
}
}
现在静态函数是:
static func checkErrorCode(_ errorCode: Int) -> DatabaseErrors { DatabaseErrors(rawValue: errorCode) ?? .ok }
就这样!124行代码减少到24行,现在您可以添加任何您想要的案例,而不会产生任何歧义。您的代码是史诗般的耐干性
首先,您确实需要重构它:
class ErrorHandler {
public enum DatabaseErrors: Int, Error {
case ok
case incorrectFormat
case userHasNoRights
case doesNotExists
case authError
case serverError
case missingData
case alreadyRegistered
case loadError
case inactive
case updateRequired
case incorrectData
case databaseError
private var domain: String { "ourwebpage" }
private var errorCode: Int { rawValue }
var description: String { NSLocalizedString(String(format: "server_message_%.2d", errorCode), comment: "") }
var foundationError: NSError { NSError(domain: domain, code: errorCode, userInfo: [NSLocalizedDescriptionKey: description]) }
}
}
现在静态函数是:
static func checkErrorCode(_ errorCode: Int) -> DatabaseErrors { DatabaseErrors(rawValue: errorCode) ?? .ok }
就这样!124行代码减少到只有24行,现在您可以添加任何您想要的案例,而不存在任何歧义。当我打印error.domain时,它仍然显示Proyect.ErrorHandler.DatabaseErrors而不是我们的网页,它仍然没有说明或用户信息好的,我的坏,问题是,当我打印error.domain时,它仍然显示Proyect.ErrorHandler.DatabaseErrors而不是我们的网页,它仍然没有说明或用户信息好吧,我的错,问题是我再次将它转换为NSError