Ответ:
В UIKit протоколы UITableViewDataSource и UITableViewDelegate позволяют передать таблице отдельные обязанности через делегирование.
Объект, назначенный в свойство tableView.delegate, является делегатом. Обычно это контроллер экрана. Он реализует методы протокола UITableViewDelegate, чтобы сообщать таблице о действиях и поведении интерфейса: например, об обработке выбора строки, высоте строк или подготовке заголовков. Сам протокол UITableViewDelegate в основном состоит из необязательных методов, поэтому реализовывать все методы не требуется.
Данные предоставляет отдельный объект, назначенный в tableView.dataSource. Он реализует обязательные методы UITableViewDataSource, в частности tableView(_:numberOfRowsInSection:) и tableView(_:cellForRowAt:): сообщает количество строк и возвращает ячейку для каждой строки.
Когда таблице нужно отобразить содержимое или обработать событие, она вызывает соответствующий метод назначенного объекта. Так UIKit отделяет универсальную реализацию таблицы от данных и конкретного поведения приложения. Это поддерживает переиспользование компонентов, уменьшает связанность и позволяет приложениям настраивать интерфейс через общий контракт. Обязательные методы относятся к протоколу источника данных, а не ко всем методам делегата.
