Ошибка типа номера декодирования iOS JSON - PullRequest
0 голосов
/ 05 июня 2018

У меня проблемы с декодированием банковской информации из ответа JSON API.

Вот соответствующие части моих структур данных.Я создал объект TransactionResponse, чтобы упростить извлечение соответствующих данных из ответа:

struct Transaction: Decodable {
    ... // other properties, not relevant to this
    let isFutureDated: Float?   /\
    ... // see above ___________/
}

struct TransactionResponse: Decodable {
    let response: Response?

    struct Response: Decodable {
        ...
        let transactions: [Transaction]?
    }
}

И мое преобразование из объекта данных JSON:

do {
    let transactions = try JSONDecoder().decode(TransactionResponse.self, from: data)
} catch let localError {
    print(localError)
}

Если я закомментирую isFutureDated свойство, объект загружается просто отлично (есть еще около дюжины других свойств, поэтому дело не только в том, что он ничего не загружает: P).Когда я включаю свойство isFutureDated в структуру данных, я улавливаю следующую ошибку:

typeMismatch (Swift.String, Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue): "response", intValue: nil), CodingKeys (stringValue: "транзакции", intValue: nil), _JSONKey (stringValue: "Index 0", intValue: 0), CodingKeys (stringValue: "isFutureDated", intValue: nil)], debugDescription: "Предполагается декодировать Float, но вместо этого найдено число." , underError: nil))

Я что-то упустил?Float не число?Я также попытался изменить тип для isFutureDated на Double, Int, Int8, Int16, Int 32, Int64, UInt, UInt8 ... Вы понимаете.Даже данные и строки.Всегда одна и та же ошибка: замена части Float на тип, на который она рассчитывает.

Последнее замечание, фактическое поле JSON из объекта ответа выглядит следующим образом:

isFutureDated = 0;

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

1 Ответ

0 голосов
/ 05 июня 2018

О, неважно. isFutureDated должен быть логическим, а не каким-либо числом.Т.е.

let isFutureDated: Bool?

Странно.

...