Ответ, похоже, на ваш вопрос: «У ключей JSON нет порядка». Кроме того, две вещи, которые являются логически равными, могут кодироваться по-разному (например, если их равенство зависит только от их идентификатора). Кроме того, ссылочные типы, которые кодируют одни и те же значения, могут вообще не быть совместимыми (например, UIView). Кроме того, это создает очень широкую перегрузку ==
, что делает проверку типов более дорогой (почти как +
очень дорого).
То, что вы делаете, пытается автоматически соответствовать Equatable
, когда он может быть синтезирован. Свифт мог бы сделать это; фактически, для большинства Encodable
случаев Equatable
можно синтезировать, просто добавив : Equatable
. Команда Swift явно решила не выполнять автоматическое согласование в этих случаях и заставлять вас запрашивать его, когда вы это имеете в виду, потому что это не всегда означает «все свойства содержат одинаковые биты». Когда команда Swift явно выбирает избегать функции, редко бывает хорошей идеей добавить ее заново.