Если декодер не работает, используйте другой декодер - PullRequest
0 голосов
/ 03 мая 2019

Я создаю приложение, которое связывается с веб-приложением, используя Laravel в качестве бэкэнда. Я пытаюсь справиться с проверкой формы, но столкнулся с проблемой.

Например, скажем, когда пользователь входит в систему.

Я пытаюсь войти, используя URLRequest.

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    guard let data = data, error == nil else {return}
}
task.resume()

Я создал две структуры

struct LoginRequest: Decodable {
    let access_token: String
}

И

struct LoginErrors: Decodable {
    let error: String
    let message: String
}

Теперь я декодирую ответ JSON с помощью этого

do {
     let login = try JSONDecoder().decode(LoginRequest.self, from: data!)
} catch {
    // error
}

Как я могу попытаться декодировать структуру LoginErrors в случае сбоя LoginRequest? Если это плохая практика, как лучше всего проанализировать json, в котором есть ошибки?

Вот пример json, который мне нужно обработать.

{
    "token_type": "Bearer",
    "expires_in": 12345678,
    "access_token": "abc123",
    "refresh_token": "abc123"
}
// Error JSON
{
    "error": "invalid_credentials",
    "message": "The user credentials were incorrect."
}

1 Ответ

0 голосов
/ 03 мая 2019

Вы можете попробовать

do {
   let login = try JSONDecoder().decode(LoginRequest.self, from: data!)
} catch {
   let error = try? JSONDecoder().decode(LoginErrors.self, from: data!)
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...