Я хочу создать класс, который может хранить объекты, соответствующие определенному протоколу. Объекты должны храниться в типизированном массиве. В соответствии с протоколами Swift документация может использоваться как типы:
Поскольку это тип, вы можете использовать протокол во многих местах, где допускаются другие типы, в том числе:
- В качестве типа параметра или типа возвращаемого значения в функции, методе или инициализаторе
- Как тип константы, переменной или свойства
- Как тип элементов в массиве, словаре или другом контейнере
Однако следующее генерирует ошибки компилятора:
Протокол "SomeProtocol" может использоваться только в качестве общего ограничения, поскольку он имеет собственные или связанные требования типа
Как вы решили это решить:
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)
}
}
}