Выбор ответа Junior Протоколы, POP и дженерики спрашивают часто обновлено

Протокол делегата и weak

Вопрос

Почему компилятор не даёт написать weak var delegate: ListDelegate? для обычного protocol ListDelegate?

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

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

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

Коротко

Правильный ответ: Протокол могут реализовать структуры; нужно : AnyObject. weak работает только со ссылочными типами, а протокол без ограничения может реализовать и структура.

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

  1. Протокол могут реализовать структуры; нужно : AnyObjectправильный ответ
  2. weak нельзя использовать с опционалами, только с !
  3. Делегаты должны быть unowned, а weak для них запрещён
  4. Нужно пометить протокол @escaping, чтобы хранить его

Разбор

weak работает только со ссылочными типами, а протокол без ограничения может реализовать и структура. Ограничение AnyObject делает протокол только для классов. weak как раз требует опционал. unowned для делегата опасен: делегат может исчезнуть раньше. @escaping относится к замыканиям, не к протоколам.

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

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