Потому что это не текущая функция Swift. Когда есть связанный тип, всегда есть связанный тип. Он не исчезает только потому, что вы его сдерживаете. И как только у него есть связанный тип, он не конкретен.
Нет способа "наследовать" протоколы таким образом. То, что вы имеете в виду:
protocol MyProtocol {
var id: UUID { get }
}
И затем вы можете прикрепить опознаваемый элемент к структурам, которые в нем нуждаются:
struct X: MyProtocol, Identifiable {
var id: UUID
}
(обратите внимание, что пункт where
не требуется.)
Сегодня не существует функции Swift, которая позволяет вам говорить «типы, которые соответствуют X, неявно соответствуют Y». На сегодняшний день также нет функции Swift, которая допускает массив «вещей, которые соответствуют Identifiable с ID == UUID». (Это называется обобщенным экзистенциалом, и в настоящее время он недоступен.)
Скорее всего, вам следует go вернуться к своему телефонному коду и выяснить, зачем вам это нужно. Если вы разместите код с итерацией test
и, в частности, требует соответствия Identifiable
, то мы сможем помочь вам найти проект, который не требует этого.