Ответ
DataSource (объект, реализующий протокол, например, UITableViewDataSource) — это поставщик данных и информации о структуре для UI-компонента. Он не хранит состояние вида, только данные.
Основные обязанности DataSource:
- Количество: Определяет количество секций и строк/ячеек.
- Контент: Предоставляет данные для конфигурации конкретной ячейки (
cellForRowAt). - Управление данными: Обрабатывает редактирование (удаление, перемещение строк).
Пример для UITableView:
class TaskListDataSource: NSObject, UITableViewDataSource {
// DataSource ХРАНИТ данные
private var tasks: [Task] = [Task(name: "Купить продукты"), Task(name: "Закончить проект")]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count // Отвечает за количество
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
// Конфигурирует ячейку ДАННЫМИ
cell.textLabel?.text = tasks[indexPath.row].name
return cell
}
// Может отвечать за удаление
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
tasks.remove(at: indexPath.row) // Удаляет из своих данных
tableView.deleteRows(at: [indexPath], with: .fade)
}
}
}
Важно: DataSource отделен от Delegate, который отвечает за поведение и обработку действий пользователя (нажатия, выбор).