无法从枚举中获取原始字符串



我在URLSession类上有以下扩展:

extension URLSession {
@discardableResult
func sendRequest<A>(endpoint: Endpoint<A>, onComplete: @escaping (Result<A?, Error>) -> ()) -> URLSessionDataTask {
let task = dataTask(with: endpoint.request, completionHandler: { data, response, err in
if let err = err {
onComplete(.failure(err))
return
}
if let da = data, let a = try? JSONDecoder().decode(APIError.self, from: da) {
if a.error.message == "The username or password is wrong" {
onComplete(.failure(LoginErrors.uOrPincorrect))
}
if a.error.message == "Your account is locked" {
onComplete(.failure(LoginErrors.accountLocked))
}
return
}
task.resume()
return task
}
}

然后这些错误的结构和枚举:

struct APIError: Decodable {
let error: APIErrorMessage
}
struct APIErrorMessage: Decodable {
let message: String
}

enum LoginErrors: String, Error {
case uOrPincorrect = "The username or password you entered is/are wrong"
case accountLocked = "Account Locked"
case unknownError = "Unknown error"
}

最后,我打电话给一个登录网络服务:

func sessionCall(_ res: Result<LoginResponseData?, Error>) {
switch res {
case .success(let response):
...... // Some code
case .failure(let error):
self.showLoginError(error: //HOW TO GET THE STRING FROM ERROR HERE)
}
}

问题是,我想获得表示枚举的字符串,以便显示正确的错误消息,但我可以访问这个值。如果我尝试使用错误的localizedDescription,我会得到一个完全不同的字符串,其内容如下:"操作无法完成">

如果您想使用localizedDescription从包括您的错误在内的所有错误中获取错误消息,您的自定义错误类型需要符合LocalizedError

请尝试这个:

enum LoginErrors: String, LocalizedError {
case uOrPincorrect = "The username or password you entered is/are wrong"
case accountLocked = "Account Locked"
case unknownError = "Unknown error"
var errorDescription: String? {
self.rawValue
}
}

最新更新