Идентифицируемый протокол в Swift: класс vs структура
Я использую Swift 5.3
Пытаясь понять, почему, когда я объявляю эту конструкцию
final class MyActivity: Identifiable {
public let iHaveNoId: String = ""
}
он компилируется без ошибок (даже если у меня не реализовано поле "id"), а для struct
struct MyActivity: Identifiable {
public let iHaveNoId: String = ""
}
Я получаю сообщение об ошибке (как и ожидалось) - тип MyActivity не соответствует протоколу Identifiable
Более того, если я скопирую исходный код Identifiable и переименую его на свое имя, например
public protocol MyIdentifiable {
associatedtype ID : Hashable
var id: Self.ID { get }
}
тогда как структура, так и класс, реализующие протокол MyIdentifiable, выйдут из строя с соответствующей ошибкой. Тип MyActivity не соответствует протоколу MytIdentifiable.
Я озадачен.
1 ответ
Решение
Как документации поIdentifiable
утверждает, что он предоставляет реализацию по умолчанию для id
для типов классов. Однако реализации по умолчанию дляstruct
s, поэтому вам нужно добавить свойство вручную.