Les Protocoles en Swift
Qu'est-ce qu'un protocole ?
En Swift, un protocole constitue un ensemble de méthodes, propriétés et règles qu'une classe, une structure ou une énumération peut adopter. Il sert essentiellement de plan pour les types de données, les guidant sur les functionalities qu'ils doivent implémenter.
Syntaxe de base
Pour définir un protocole, vous devez utiliser le mot-clé protocol
suivi du nom du protocole, de la façon suivante :
protocol NomDuProtocole {
// Corps du protocole
}
Remarque : Les noms de protocole sont écrits en PascalCase.
Adoption de protocoles
Pour qu'une classe, structure ou énumération adopte un protocole, cela se fait en ajoutant le protocole à la définition de ces types, séparé par un double point :
:
class MaClasse: MonProtocole, AutreProtocole {
// Implémentation
}
Exigences relatives aux propriétés
Les propriétés requises sont celles qui définissent un type et, grâce aux mots-clés get
et set
, indiquent si cette propriété peut être consultée ou modifiée.
protocol MonProtocole {
var getEtSet: Int { get set }
var uniquementGet: String { get }
}
Note : Les variables consultables peuvent être lues, tandis que celles qui peuvent être modifiées peuvent être définies ou modifiées. Parfois, les développeurs choisissent de n'autoriser qu'une variable consultable.
Conformité des types de données
Les types de données qui adoptent un protocole doivent se conformer aux propriétés et méthodes définies dans celui-ci.
protocol Grammaire {
var alphabet: String { get }
}
struct Langue: Grammaire {
var alphabet: String
}
let anglais = Langue(alphabet: "abcdefghijklmnopqrstuvwxyz")
print(anglais.alphabet) // Sortie : abcdefghijklmnopqrstuvwxyz
Protocoles intégrés
Swift comprend certains protocoles intégrés, tels que :
- CaseIterable : Ce protocole inclut une propriété
allCases
. Une énumération peut adopter ce protocole pour accéder à toutes ses valeurs.
enum MageAvancement: CaseIterable {
case novice, premierEmploi, deuxiemeEmploi, troisiemeEmploi, quatriemeEmploi
}
print("Vous aurez \(MageAvancement.allCases.count) emplois différents en tant que Mage.") // Sortie : Vous aurez 5 emplois différents en tant que Mage.
D'autres protocoles intégrés incluent Comparable
, Encodable
, Hashable
, etc.