Значение, связанное с ошибкой ключа CodingKeys, всегда выдается

У меня есть эта декодируемая структура:

struct MyDecodableTester: Decodable {
    let id: Int
    let name: String
    let snakeCase: String
    let mappedCodingKey: String

    enum CodingKeys: String, CodingKey {
        case id
        case name
        case snakeCase
        case mappedCodingKey = "code_key"
    }

    static func decode(from data: Data) -> Self? {
        let decoder = JSONDecoder()
        decoder.keyDecodingStrategy = .convertFromSnakeCase
        do {
            return try decoder.decode(Self.self, from: data)
        } catch {
            print(">>> Error: \(error)")
        }

        return nil
    }
}

Я попытался вызвать функцию decode(from data:), используя этот JSON:

{
"id": 1,
"name": "name",
"snake_case": "snake_case",
"code_key": "code_key"
}

Проблема в том, что он всегда выдает эту ошибку:

keyNotFound(CodingKeys(stringValue: "code_key", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "Нет значения, связанного с ключом CodingKeys(stringValue: \"code_key\", intValue: nil) (\ "ключ_кода\").", базовая ошибка: ноль))

Даже когда я добавил функцию init(from coder:) ниже, она всегда падает, потому что mappedCodingKey равно нулю.

init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)

    id = try container.decodeIfPresent(Int.self,
                                           forKey: .id)!
    name = try container.decodeIfPresent(String.self, forKey: .name)!
    snakeCase = try container.decodeIfPresent(String.self,
                                             forKey: .snakeCase)!
    mappedCodingKey = try container.decodeIfPresent(String.self,
                                            forKey: .mappedCodingKey)!
}

Я считаю, что мой JSON уже правильный, поэтому я не знаю, почему произошла ошибка. Есть ли что-то, что я пропустил здесь? Как я могу это исправить?


person Bawenang Rukmoko Pardian Putra    schedule 26.11.2019    source источник
comment
Вы можете попробовать это снова после комментирования keyDecodingStrategy?   -  person Shubham    schedule 26.11.2019
comment
Похоже на дубликат Стратегия convertFromSnakeCase не работает с пользовательским CodingKeys в Swift.   -  person Martin R    schedule 26.11.2019
comment
@MartinR Ах, ты прав. Спасибо.   -  person Bawenang Rukmoko Pardian Putra    schedule 27.11.2019