🧠 La délégation est souvent utilisée pour permettre à un objet (le déléguant) de communiquer avec un autre objet (le délégué) de manière décentralisée. UIKit, le framework d’interface utilisateur d’Apple, utilise largement le modèle de délégation pour gérer les interactions utilisateur.
Supposons que nous ayons une UITableView et que nous voulions réagir lorsque l’utilisateur sélectionne une cellule. Nous utiliserons le protocole UITableViewDelegate pour déléguer cette responsabilité à un autre objet.
import UIKit
class MyTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Définir le délégué de la table view
tableView.delegate = self
}
}
extension MyTableViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Réagir à la sélection d'une cellule
print("Cell selected at section \(indexPath.section), row \(indexPath.row)")
}
}
MyTableViewController agit comme le délégué de la table view.tableView(_:didSelectRowAt:) est appelée sur le délégué, permettant à l’objet délégué (MyTableViewController dans ce cas) de réagir à cet événement.Vous pouvez également implémenter des délégués personnalisés dans votre propre code. Voici un exemple simple où une classe DataManager délègue la tâche de charger des données à une autre classe conformant au protocole DataManagerDelegate :
protocol DataManagerDelegate: AnyObject {
func dataManagerDidFinishLoadingData(data: [String])
}
class DataManager {
weak var delegate: DataManagerDelegate?
func loadData() {
// Code pour charger des données
let loadedData = ["Item 1", "Item 2", "Item 3"]
// Informer le délégué que les données ont été chargées
delegate?.dataManagerDidFinishLoadingData(data: loadedData)
}
}
class MyViewController: UIViewController, DataManagerDelegate {
let dataManager = DataManager()
override func viewDidLoad() {
super.viewDidLoad()
// Définir le délégué de DataManager sur cette classe
dataManager.delegate = self
// Charger les données
dataManager.loadData()
}
// Implémenter la méthode du délégué
func dataManagerDidFinishLoadingData(data: [String]) {
// Réagir lorsque les données sont chargées
print("Data loaded: \(data)")
}
}
Dans cet exemple, MyViewController agit comme le délégué de DataManager. Lorsque les données sont chargées, la méthode dataManagerDidFinishLoadingData(data:) est appelée sur le délégué, permettant à l’objet délégué (MyViewController dans ce cas) de réagir à cet événement.
La délégation est un modèle de conception puissant qui facilite la communication entre les objets dans une application Swift, favorisant la modularité et la réutilisation du code.