/ / Fonction Overload Array basée sur le type de ses éléments - swift

Fonction Overload Array basée sur le type de ses éléments - swift

Est-il possible de réaliser quelque chose comme ça dans Swift?

extension Array {
func processItems<Element: Protocol1>() {
for item in self {
// deal with Protocol1 objects
}
}

func processItems<Element: Protocol2>() {
for item in self {
// deal with Protocol2 objects
}
}
}

Ce que je veux réaliser, c'est étendre la Array et surcharge processItems en fonction du type d'éléments dans le tableau.

Une alternative consisterait à avoir une seule fonction et à utiliser la coulée / reliure facultative, mais je perdrais la sécurité de ce type, et je pourrais me retrouver avec une fonction gigantesque contenant beaucoup si if-let"s

func processItem() {
for item in self {
if let item = item as? Protocol1 {
// deal with Protocol1 objects
} else if let item = item as? Protocol2 {
// deal with Protocol2 objects
}
}
},

ou déclarer processItems comme fonction libre:

func processItems<T: Protocol1>(items: [T]) {
// ...
}

func processItems<T: Protocol2>(items: [T]) {
// ...
}

Cependant, j’aimerais savoir si je peux «intégrer» la fonction dans le Array classe, pour le garder localisé. Si cela est possible, alors la technique pourrait être appliquée à d'autres classes génériques (intégrées ou personnalisées).

Réponses:

3 pour la réponse № 1

Que dis-tu de ça?

extension Array where Element: Protocol1 {
func processItems() {
for item in self {  // item conforms to Protocol1
...