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

Swift 无法从枚举中获取原始字符串,swift,error-handling,enums,Swift,Error Handling,Enums,我在URLSession类上有以下扩展: extension URLSession { @discardableResult func sendRequest<A>(endpoint: Endpoint<A>, onComplete: @escaping (Result<A?, Error>) -> ()) -> URLSessionDataTask { let task = dataTask(with: endp

我在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
    }
}
最后是我对登录web服务的调用:

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)
        }
    }
func sessionCall(\res:Result){
开关res{
成功案例(让我们回答):
……一些代码
案例。失败(let错误):
self.showlogin错误(错误://如何从错误中获取字符串)
}
}

问题是,我想获取表示枚举的字符串,以便显示正确的错误消息,但我完全可以访问此值。如果我尝试使用错误的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
    }
}

如果要使用
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
    }
}