Voglio creare una classe in grado di memorizzare oggetti conformi a un determinato protocollo. Gli oggetti devono essere archiviati in un array tipizzato. Secondo i protocolli di documentazione Swift possono essere utilizzati come tipi:
Poiché è un tipo, è possibile utilizzare un protocollo in molti luoghi in cui sono consentiti altri tipi, tra cui:
- Come tipo di parametro o tipo restituito in una funzione, metodo o inizializzatore
- Come il tipo di una costante, variabile o proprietà
- Come il tipo di elementi in un array, dizionario o altro contenitore
Tuttavia, quanto segue genera errori del compilatore:
Il protocollo "SomeProtocol" può essere utilizzato solo come vincolo generico perché ha requisiti di tipo Self o associati
Come dovresti risolvere questo:
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)
}
}
}