使用 Codable 时出错 - Swift
Errors when using 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)!)
在出现错误的两行上将 encoder
更改为 encode
。请注意,上面的行(即 var container...)将保留 encoder
.
try container.encode(self.firstName, forKey: .firstName)
try container.encode(self.lastName, forKey: .lastName)
如前所述,这是一个错字 encode
与 encoder
:
try container.encode(...
实际上在这种情况下您根本不需要指定 CodingKeys
和编码方法,这就足够了:
struct NewCustomer : Codable {
var firstName, lastName : String
}
我正在使用 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)!)
在出现错误的两行上将 encoder
更改为 encode
。请注意,上面的行(即 var container...)将保留 encoder
.
try container.encode(self.firstName, forKey: .firstName)
try container.encode(self.lastName, forKey: .lastName)
如前所述,这是一个错字 encode
与 encoder
:
try container.encode(...
实际上在这种情况下您根本不需要指定 CodingKeys
和编码方法,这就足够了:
struct NewCustomer : Codable {
var firstName, lastName : String
}