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.