Chcę utworzyć klasę, która może przechowywać obiekty zgodne z określonym protokołem. Obiekty powinny być przechowywane w tablicy typu. Zgodnie z dokumentacją Swift protokoły mogą być używane jako typy:
Ponieważ jest to typ, możesz używać protokołu w wielu miejscach, w których dozwolone są inne typy, w tym:
- Jako typ parametru lub typ zwracany w funkcji, metodzie lub inicjatorze
- Jako typ stałej, zmiennej lub właściwości
- Jako typ elementów w tablicy, słowniku lub innym kontenerze
Jednak następujące generuje błędy kompilatora:
Protokół „SomeProtocol” może być używany tylko jako ograniczenie ogólne, ponieważ ma wymagania typu Self lub powiązane
Jak masz to rozwiązać:
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)
}
}
}