Ответ
Data Source — это паттерн проектирования и протокол в UIKit, который предоставляет данные и информацию о структуре для заполнения представлений, таких как UITableView или UICollectionView. Он отделяет логику данных от логики отображения.
Основные обязанности Data Source:
- Определение количества секций и строк/ячеек.
- Конфигурация и возврат ячеек для конкретных индексов.
- (Опционально) Управление заголовками, нижними колонтитулами и редактированием таблицы.
Ключевые методы для UITableViewDataSource:
// Обязательные методы:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// Опциональные методы:
func numberOfSections(in tableView: UITableView) -> Int
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
Пример базовой реализации:
class MyDataSource: NSObject, UITableViewDataSource {
private let items = ["Apple", "Banana", "Orange"]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath)
cell.textLabel?.text = items[indexPath.row]
return cell
}
}
// Использование:
// tableView.dataSource = MyDataSource()
Современные альтернативы:
UICollectionViewDiffableDataSource/UITableViewDiffableDataSource— используют снапшоты данных для автоматического анимированного обновления интерфейса.- Отдельный класс или extension ViewController — Data Source может быть вынесен в отдельную сущность для соблюдения принципа единственной ответственности (SRP).