Выбор ответа Junior Протоколы, POP и дженерики спрашивают часто обновлено
Протокол делегата и weak
Вопрос
Почему компилятор не даёт написать weak var delegate: ListDelegate? для обычного protocol ListDelegate?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Протокол могут реализовать структуры; нужно : AnyObject. weak работает только со ссылочными типами, а протокол без ограничения может реализовать и структура.
Варианты ответа
- Протокол могут реализовать структуры; нужно
: AnyObjectправильный ответ weakнельзя использовать с опционалами, только с!- Делегаты должны быть
unowned, аweakдля них запрещён - Нужно пометить протокол
@escaping, чтобы хранить его
Разбор
weak работает только со ссылочными типами, а протокол без ограничения может реализовать и структура. Ограничение AnyObject делает протокол только для классов. weak как раз требует опционал. unowned для делегата опасен: делегат может исчезнуть раньше. @escaping относится к замыканиям, не к протоколам.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Протоколы, POP и дженерики»
- Условное соответствие протоколу
- Метод из расширения протокола: какая реализация вызовется
- Ограничение дженерика Comparable
- Как ускорить вызов методов класса
- Что такое associatedtype
- Виды диспетчеризации в Swift
- Type erasure в Swift
- Специализация дженериков