Как создать рекурсивный равнозначный протокол для swift struct

#swift #equatable

#swift #равнозначный

Вопрос:

Есть ли какой-либо способ, которым я могу настроить протокол таким образом, чтобы, если мы определяем структуру, которой соответствуют все ее свойства Equatable , тогда она становится автоматической Equatable без необходимости писать весь шаблонный код для сравнения всех свойств внутри класса. В идеале этот протокол также наследуется от Equatable .

например, если вызывается такой протокол RecursiveEquatable , и я определяю структуру

 struct A: RecursiveEquatable {
  let value: Int
}
  

тогда мне не нужно писать шаблонный код

 public func ==(lhs: A, rhs: A) -> Bool {
  return lhs.value == rhs.value
}
  

Комментарии:

1. Вы могли бы использовать MirrorType для извлечения всех свойств и их сравнения. Однако это не гарантирует, что все свойства будут Equatable доступны во время компиляции.

2. На самом деле это невозможно. Знаете ли вы какие-либо языки, которые имеют такую функцию? Мне любопытно, как это делается.

3. Да, классы case в scala имеют эти функции. @alexander-momchliov