Обработка ошибок с использованием JSONDecoder в Swift - PullRequest
0 голосов
/ 28 марта 2019

Я использую JSONDecoder() в Swift и мне нужно получить более качественные сообщения об ошибках.

В описании отладки (например) я вижу сообщения типа «Указанные данные не были действительными в формате JSON», но мне нужно знать, что это не ошибка сети (например).

    let decoder = JSONDecoder()
    if let data = data{
        do {
            // process data

        } catch let error {
           // can access error.localizedDescription but seemingly nothing else
    }

Я пытался привести к DecodingError, но это, похоже, не дает больше информации. Мне, конечно, не нужна строка - даже код ошибки гораздо полезнее, чем этот ...

1 Ответ

4 голосов
/ 28 марта 2019

Никогда печать error.localizedDescription в блоке декодирования catch.Это возвращает совершенно бессмысленное общее сообщение об ошибке.Печатайте всегда экземпляр error.Тогда вы получите желаемую информацию.

let decoder = JSONDecoder()
    if let data = data {
        do {
            // process data

        } catch  {
           print(error)
    }

Или для набора full используйте

let decoder = JSONDecoder()
if let data = data {
    do {
       // process data
    } catch let DecodingError.dataCorrupted(context) {
        print(context)
    } catch let DecodingError.keyNotFound(key, context) {
        print("Key '\(key)' not found:", context.debugDescription)
        print("codingPath:", context.codingPath)
    } catch let DecodingError.valueNotFound(value, context) {
        print("Value '\(value)' not found:", context.debugDescription)
        print("codingPath:", context.codingPath)
    } catch let DecodingError.typeMismatch(type, context)  {
        print("Type '\(type)' mismatch:", context.debugDescription)
        print("codingPath:", context.codingPath)
    } catch {
        print("error: ", error)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...