Comment limiter les sous-types dans un tableau en Swift?
sobes.tech IA
Réponse de l'IA
En Swift, il n’est pas possible de restreindre directement les sous-types dans des tableaux avec des types homogènes d’éléments. Cependant, on peut obtenir un comportement similaire en utilisant les approches suivantes :
-
Utilisation de protocoles : Définir un protocole général pour tous les sous-types autorisés et l’utiliser comme type des éléments du tableau.
protocol SpecificType {} class SubtypeA: SpecificType {} class SubtypeB: SpecificType {} class AnotherType {} var specificArray: [SpecificType] = [] // Tableau contenant uniquement des types qui respectent SpecificType specificArray.append(SubtypeA()) specificArray.append(SubtypeB()) // specificArray.append(AnotherType()) // Erreur de compilation, AnotherType ne respecte pas le protocole -
Utilisation de génériques avec restriction par protocole : Si vous créez une collection ou une fonction personnalisée, vous pouvez utiliser des génériques avec restriction par protocole.
struct RestrictedArray<T: SpecificType> { private var elements: [T] = [] mutating func append(_ element: T) { elements.append(element) } func getElements() -> [T] { return elements } } // var validArray = RestrictedArray<SubtypeA>() // Tableau uniquement de SubtypeA respectant SpecificType // var invalidArray = RestrictedArray<AnotherType>() // Erreur de compilation, AnotherType ne respecte pas le protocole -
Utilisation d’énumérations (Enum) avec valeurs associées : Si le nombre de sous-types est fixe et connu à l’avance, on peut utiliser une énumération.
enum AllowedSubtypes { case typeA(SubtypeA) case typeB(SubtypeB) } class SubtypeA {} class SubtypeB {} var enumArray: [AllowedSubtypes] = [] enumArray.append(.typeA(SubtypeA())) enumArray.append(.typeB(SubtypeB())) // enumArray.append(.typeA(SubtypeB())) // Erreur de type dans la valeur associée
Ainsi, la restriction directe des sous-types dans un tableau [SomeType] standard n’est pas possible. À la place, on utilise des protocoles, des génériques avec restrictions ou des énumérations pour assurer la sécurité statique des types.