使用Codable时发生错误-Swift

时间:2019-03-13 16:31:58

标签: swift codable encodable

我正在使用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)!)

2 个答案:

答案 0 :(得分:2)

在出现错误的两行上将encoder更改为encode。请注意,上面的行(即var容器...)将保留encoder

try container.encode(self.firstName, forKey: .firstName)
try container.encode(self.lastName, forKey: .lastName)

答案 1 :(得分:0)

如前所述,这是encodeencoder的错别字:

try container.encode(...

实际上,在这种情况下,您根本不需要指定CodingKeys和编码方法,就足够了:

struct NewCustomer : Codable {
    var firstName, lastName : String
}