这个 .encode 的扩展签名是什么?
What is the extension signature for this .encode?
我正在将核心数据实体的所有对象编码为 JSON。
我在核心数据实体扩展中有这些行...
public func encode(to encoder:Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
...
}
我想在 container.encode
部分为 .encode
部分创建一个扩展,这样我就可以截取它并根据需要进行更改..
我看到这个 .encode
有以下签名
public mutating func encode<T>(_ value: T, forKey key: KeyedEncodingContainer<K>.Key) throws where T : Encodable
蚂蚁属于
public struct KeyedEncodingContainer<K> : KeyedEncodingContainerProtocol where K : CodingKey {
如果我想覆盖KeyedEncodingContaine
r的这个encode
,扩展头应该怎么写?
这是我盲目展示我需要的东西...
extension KeyedEncodingContainer<K> : KeyedEncodingContainerProtocol where K : CodingKey {
override func encode<T>(_ value: T, forKey key: Self.Key) throws where T : Encodable
// stuff here
}
}
换句话说,我需要用我的替换 encode
。这可能吗?
根据@shadowrun,我无法扩展它,因为它是一个结构。
因此,假设我创建了一个名为 EncodingNormalized
的 class,但这是不正确的。
class EncodingNormalized {
class func encode(container:KeyedEncodingContainer<Key> where Key : CodingKey) {
}
}
我仍然需要 class 和 func 编码签名。没那么容易。
because I want to intercept the value as it is being encoded to change the format to what I want. Example: dates are being encoded as numbers and I need them as string with a specific format.
如果您要处理 JSONEncoder
,请在编码器上设置 dateEncodingStrategy
以按照您想要的格式提供日期。
如果您不处理 JSONEncoder
,并且您还处理日期以外的其他自定义格式设置,那么您可以在 encode(to: )
实现中手动完成(例如,转换一些东西否则为字符串,然后对字符串进行编码)。
我正在将核心数据实体的所有对象编码为 JSON。
我在核心数据实体扩展中有这些行...
public func encode(to encoder:Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
...
}
我想在 container.encode
部分为 .encode
部分创建一个扩展,这样我就可以截取它并根据需要进行更改..
我看到这个 .encode
有以下签名
public mutating func encode<T>(_ value: T, forKey key: KeyedEncodingContainer<K>.Key) throws where T : Encodable
蚂蚁属于
public struct KeyedEncodingContainer<K> : KeyedEncodingContainerProtocol where K : CodingKey {
如果我想覆盖KeyedEncodingContaine
r的这个encode
,扩展头应该怎么写?
这是我盲目展示我需要的东西...
extension KeyedEncodingContainer<K> : KeyedEncodingContainerProtocol where K : CodingKey {
override func encode<T>(_ value: T, forKey key: Self.Key) throws where T : Encodable
// stuff here
}
}
换句话说,我需要用我的替换 encode
。这可能吗?
根据@shadowrun,我无法扩展它,因为它是一个结构。
因此,假设我创建了一个名为 EncodingNormalized
的 class,但这是不正确的。
class EncodingNormalized {
class func encode(container:KeyedEncodingContainer<Key> where Key : CodingKey) {
}
}
我仍然需要 class 和 func 编码签名。没那么容易。
because I want to intercept the value as it is being encoded to change the format to what I want. Example: dates are being encoded as numbers and I need them as string with a specific format.
如果您要处理 JSONEncoder
,请在编码器上设置 dateEncodingStrategy
以按照您想要的格式提供日期。
如果您不处理 JSONEncoder
,并且您还处理日期以外的其他自定义格式设置,那么您可以在 encode(to: )
实现中手动完成(例如,转换一些东西否则为字符串,然后对字符串进行编码)。