Ретроактивное соответствие и @retroactive
Вопрос
Почему Swift 6 предупреждает о extension URL: Identifiable в коде приложения?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
URLиз Foundation нельзя расширять протоколами в коде приложения в принципе- Это ретроактивное соответствие чужого типа чужому протоколу; помечают
@retroactiveправильный ответ - У
URLуже естьIdentifiableв Foundation, это дублирование соответствия - Расширения стандартных типов протоколами разрешены только в тестовых таргетах
Разбор
SE-0364 добавил предупреждение, когда модуль объявляет соответствие типа из другого модуля протоколу тоже из другого модуля. Если владелец типа или протокола позже добавит то же соответствие, в программе окажутся два, и какое выберется, не определено. Варианты: обёртка-тип, свой протокол или явная пометка extension URL: @retroactive Identifiable. Расширять URL методами можно где угодно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Протокольно-ориентированное программирование
Следующий вопрос
Требование Self в протоколе
Термины по теме
Ещё по теме «Протоколы, POP и дженерики»
- Протокол делегата и weak
- Протокол с associatedtype как тип параметра
- Условное соответствие протоколу
- Метод из расширения протокола: какая реализация вызовется
- Ограничение дженерика Comparable
- Как ускорить вызов методов класса
- Что такое associatedtype
- Виды диспетчеризации в Swift