Выбор ответа Senior Протоколы, POP и дженерики обновлено

Ретроактивное соответствие и @retroactive

Вопрос

Почему Swift 6 предупреждает о extension URL: Identifiable в коде приложения?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Это ретроактивное соответствие чужого типа чужому протоколу; помечают @retroactive. SE-0364 добавил предупреждение, когда модуль объявляет соответствие типа из другого модуля протоколу тоже из другого модуля.

Варианты ответа

  1. URL из Foundation нельзя расширять протоколами в коде приложения в принципе
  2. Это ретроактивное соответствие чужого типа чужому протоколу; помечают @retroactiveправильный ответ
  3. У URL уже есть Identifiable в Foundation, это дублирование соответствия
  4. Расширения стандартных типов протоколами разрешены только в тестовых таргетах

Разбор

SE-0364 добавил предупреждение, когда модуль объявляет соответствие типа из другого модуля протоколу тоже из другого модуля. Если владелец типа или протокола позже добавит то же соответствие, в программе окажутся два, и какое выберется, не определено. Варианты: обёртка-тип, свой протокол или явная пометка extension URL: @retroactive Identifiable. Расширять URL методами можно где угодно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.