Неверное преобразование из функции выброса типа '(_) throws -> ()' в тип функции без броска '(Response) -> Void' - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно обработать коды ошибок API, как это, и выдать ошибку для некоторого кода состояния. Но следующий код показывает вышеуказанную ошибку. Как я могу достичь этого?

func login(data: [String: Any], completion: @escaping (ResponseModel<SignUpModel>?) -> Void) throws {
        NetworkAdapter.request(target: .login(data: data), success: { (response) in

            if let responseModel =  try? JSONDecoder().decode(ResponseModel<SignUpModel>.self,from: response.data) {
                switch responseModel.statusCode {
                case 2000:
                    completion(responseModel)
                case 4005:
                    throw ValidationError.athenticationFailure
                case .none,.some:
                    break
                }
                completion(responseModel)
            } else {
            }
        })
    }

1 Ответ

1 голос
/ 21 апреля 2020

Вы не можете

throw ValidationError.athenticationFailure

, потому что запрос асинхронный. Что вы можете сделать, это изменить тип завершения на Result<ResponseModel<SignUpModel>, ValidationError> для возврата

completion(.success(responseModel))

в случае успеха и

completion(.failure(athenticationFailure)

в случае ошибки. Кстати, я покупаю u ?

...