Быстрое кодируемое, декодируемое и кодируемое - PullRequest
0 голосов
/ 12 марта 2020

В Apple do c обнаружено, что протокол 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?

Если нет никакого почтения, почему мы не можем использовать & в местах ,?

Ответы [ 3 ]

5 голосов
/ 12 марта 2020

Нет, никакой разницы нет, Codable - это typealias для Encodable & Decodable, поэтому он объединяет 2 протокола, которые вы можете использовать любым способом

В Swift & соответствует составу протокола , , поэтому Encodable, Decodable = Encodable & Decodable = Codable

2 голосов
/ 12 марта 2020

Они функционально одинаковы, но вы можете делать что-то с синтаксисом &, что нельзя с помощью списка через запятую. Ни один из них не будет работать с запятой.

public typealias Codable = Decodable & Encodable

func doSomething(with item: ProtocolA & ProtocolB) {
}
2 голосов
/ 12 марта 2020

Не думай так. Кодируемый означает, что они могут быть декодированы из и закодированы в другое представление. Декодируемый означает, что он может быть декодирован, но не закодирован. И кодируемый является противоположностью этого.

...