Swift 可编码、可解码与可编码

Swift Encodable, Decodable Vs Codable

在 Apple doc 中发现 Codable 协议由 EncodableDecodable 组成。因此,

Codable = Encodable & Decodable

现在,假设我在下面实施 类,

class X: Codable {
    var name: String
}

class Y: Encodable, Decodable {
    var name: String
}

class Z: Encodable & Decodable {
    var name: String
}

那么,类、XYZ在功能上有什么区别吗?

如果没有尊重,为什么我们不能在 , 的地方使用 &

不,没有任何区别,CodableEncodable & Decodable 的类型别名,因此它结合了 2 种协议,您可以随意使用任何方式

In Swift & is the same as , in protocol composition so Encodable, Decodable = Encodable & Decodable = Codable

不这么认为。可编码意味着它们可以从另一种表示中解码并编码成另一种表示。可解码意味着它可以被解码,但不能被编码。 encodable 与此相反。

它们在功能上是相同的,但是您可以使用 & 语法来做一些您不能用逗号分隔列表做的事情。这些都不适用于逗号方法。

public typealias Codable = Decodable & Encodable

func doSomething(with item: ProtocolA & ProtocolB) {
}

编码 将自定义类型实例转换为其他表示形式(例如 JSON 和 pList)的过程称为编码或序列化。对于编码,自定义类型符合 Encodable 协议。

解码 将 JSON 或 pList 等表示形式的数据转换为自定义类型实例的过程称为解码或反序列化。对于解码,自定义类型符合 Decodable 协议。

可编码 为了同时支持编码和解码,自定义类型可以符合 Codable 协议,该协议同时符合 Encodable 和 Decodable。

阅读更多关于 CodableDecodingEncoding Click on the this Link