XCTAssertEqual
требует, чтобы его аргументы соответствовали Equatable
. MyStruct.Type
- это мета-тип, который, как и все мета-типы, не соответствует Equatable
, поэтому MyStruct.self
нельзя использовать в качестве аргумента для XCTAssertEqual
.
Однако ==
Оператор определен для всех мета-типов. Вот почему вы можете использовать ==
на них. Это «особый случай», реализованный здесь .
«Но не является ли ==
одним из требований требований Equatable
?» Вы могли бы сказать. Да, но это не означает, что типы, которые реализуют ==
, автоматически соответствуют Equatable
. Обратное утверждение верно: каждый тип, соответствующий Equatable
, должен реализовывать ==
.