将 class 编码为单个值而不是字典 swift
encode class to single value not dictionary swift
鉴于 类:
class ComplementApp: Codable{
let name: String
let idSpring: String
}
class MasterClass: Encodable{
let complement: ComplementApp
///Other propierties
}
我想得到:
//Where "Some ID" is the value of complement.idSpring
{
complement: "Some ID"
//Plus the other properties
}
没有
{
complement: {
name: "Some Name",
idSpring: "Some ID"
}
//Plus other properties
}
这是默认设置。
我知道我可以在 MasterClass 中抛出编码函数和 CodingKeys,但我有 20 个其他变量,我应该添加 19 个额外的键。我可以在 ComplementApp 中实现 CodingKeys 吗?
您可以通过自定义 encode(to:)
实现来实现此目的:
class ComplementApp: Codable {
let name: String
let idSpring: String
func encode(to coder: Encoder) throws {
var container = coder.singleValueContainer()
try container.encode(idSpring)
}
}
使用 singleValueContainer
将导致您的对象被编码为单个值而不是 JSON 对象。而且您不必触摸外部 class.
鉴于 类:
class ComplementApp: Codable{
let name: String
let idSpring: String
}
class MasterClass: Encodable{
let complement: ComplementApp
///Other propierties
}
我想得到:
//Where "Some ID" is the value of complement.idSpring
{
complement: "Some ID"
//Plus the other properties
}
没有
{
complement: {
name: "Some Name",
idSpring: "Some ID"
}
//Plus other properties
}
这是默认设置。 我知道我可以在 MasterClass 中抛出编码函数和 CodingKeys,但我有 20 个其他变量,我应该添加 19 个额外的键。我可以在 ComplementApp 中实现 CodingKeys 吗?
您可以通过自定义 encode(to:)
实现来实现此目的:
class ComplementApp: Codable {
let name: String
let idSpring: String
func encode(to coder: Encoder) throws {
var container = coder.singleValueContainer()
try container.encode(idSpring)
}
}
使用 singleValueContainer
将导致您的对象被编码为单个值而不是 JSON 对象。而且您不必触摸外部 class.