Делегирование
Суть
Делегирование — паттерн, в котором объект передаёт часть своей работы или решений другому объекту — делегату — через протокол. Объект не знает конкретный тип делегата, только контракт. Это «один к одному», в отличие от Observer: у UITableView один delegate и один dataSource. Так построен почти весь UIKit: UITableViewDelegate, UITextFieldDelegate, URLSessionDelegate, UIApplicationDelegate.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep