5

在 Apple doc中发现,该Codable协议由Encodable和组成Decodable。因此,

Codable = Encodable & Decodable

现在,假设我在下面的类中实现,

class X: Codable {
    var name: String
}

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

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

X那么,类、Y和之间是否有任何功能差异Z

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

4

3 回答 3

10

不,没有任何区别,Codable是 的类型别名Encodable & Decodable,因此它结合了您可以以任何方式自由使用的 2 个协议

在 Swift中&与 相同在协议组合中 so Encodable, Decodable= Encodable & Decodable=Codable

于 2020-03-12T10:34:52.880 回答
3

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

public typealias Codable = Decodable & Encodable

func doSomething(with item: ProtocolA & ProtocolB) {
}
于 2020-03-12T10:41:01.737 回答
2

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

于 2020-03-12T10:35:34.833 回答