#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