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 № 1Que dis-tu de ça?
extension Array where Element: Protocol1 {
func processItems() {
for item in self { // item conforms to Protocol1
...