Идентифицируемый протокол в 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для типов классов. Однако реализации по умолчанию дляstructs, поэтому вам нужно добавить свойство вручную.

Другие вопросы по тегам