Ответ:

В UIKit протоколы UITableViewDataSource и UITableViewDelegate позволяют передать таблице отдельные обязанности через делегирование.

Объект, назначенный в свойство tableView.delegate, является делегатом. Обычно это контроллер экрана. Он реализует методы протокола UITableViewDelegate, чтобы сообщать таблице о действиях и поведении интерфейса: например, об обработке выбора строки, высоте строк или подготовке заголовков. Сам протокол UITableViewDelegate в основном состоит из необязательных методов, поэтому реализовывать все методы не требуется.

Данные предоставляет отдельный объект, назначенный в tableView.dataSource. Он реализует обязательные методы UITableViewDataSource, в частности tableView(_:numberOfRowsInSection:) и tableView(_:cellForRowAt:): сообщает количество строк и возвращает ячейку для каждой строки.

Когда таблице нужно отобразить содержимое или обработать событие, она вызывает соответствующий метод назначенного объекта. Так UIKit отделяет универсальную реализацию таблицы от данных и конкретного поведения приложения. Это поддерживает переиспользование компонентов, уменьшает связанность и позволяет приложениям настраивать интерфейс через общий контракт. Обязательные методы относятся к протоколу источника данных, а не ко всем методам делегата.