Ошибки при использовании Codable - Swift

Я использую Codable, чтобы попытаться Encode JSON для модели, но получаю две ошибки. Значение типа KeyedEncodingContainer не имеет элемента encoder

Вот мой код:

import UIKit

struct NewCustomer : Codable {

    var firstName :String
    var lastName :String


    private enum CodingKeys : String, CodingKey {
        case firstName
        case lastName
    }

    func encode(to encoder :Encoder) throws {

        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encoder(self.firstName, forKey: .firstName)  // error here
        try container.encoder(self.lastName, forKey: .lastName)  // error here
    }
}

let customer = NewCustomer(firstName: "Jake", lastName: "Reynolds")

let encodedCustomerJSON = try! 
JSONEncoder().encode(customer)

print(encodedCustomerJSON)

print(String(data: encodedCustomerJSON, encoding: .utf8)!)

person Community    schedule 13.03.2019    source источник


Ответы (2)


Измените encoder на encode в двух строках, дающих ошибки. Обратите внимание, что в строке выше (например, var container ...) будет сохранено encoder.

try container.encode(self.firstName, forKey: .firstName)
try container.encode(self.lastName, forKey: .lastName)
person Community    schedule 13.03.2019

Как уже упоминалось, это опечатка encode vs. encoder:

try container.encode(...

Практически не нужно указывать CodingKeys и метод кодирования в этом случае, этого достаточно:

struct NewCustomer : Codable {
    var firstName, lastName : String
}
person vadian    schedule 13.03.2019