Je veux créer une classe qui peut stocker des objets conformes à un certain protocole. Les objets doivent être stockés dans un tableau typé. Selon la documentation Swift, les protocoles peuvent être utilisés comme types:
Comme il s'agit d'un type, vous pouvez utiliser un protocole dans de nombreux endroits où d'autres types sont autorisés, notamment:
- En tant que type de paramètre ou type de retour dans une fonction, une méthode ou un initialiseur
- En tant que type d'une constante, d'une variable ou d'une propriété
- En tant que type d'éléments dans un tableau, un dictionnaire ou un autre conteneur
Cependant, ce qui suit génère des erreurs de compilation:
Le protocole 'SomeProtocol' ne peut être utilisé que comme contrainte générique car il a des exigences de type Self ou associé
Comment êtes-vous censé résoudre ceci:
protocol SomeProtocol: Equatable {
func bla()
}
class SomeClass {
var protocols = [SomeProtocol]()
func addElement(element: SomeProtocol) {
self.protocols.append(element)
}
func removeElement(element: SomeProtocol) {
if let index = find(self.protocols, element) {
self.protocols.removeAtIndex(index)
}
}
}