Я хотел бы реализовать метод Swift, который принимает определенный тип класса, но только принимает экземпляры тех классов, которые соответствуют конкретному протоколу. Например, в Objective-C у меня есть этот метод:
- (void)addFilter:(GPUImageOutput<GPUImageInput> *)newFilter;
где GPUImageOutput
- определенный класс, а GPUImageInput
- протокол. Только классы GPUImageOutput
, которые соответствуют этому протоколу, являются допустимыми входами для этого метода.
Тем не менее, автоматическая версия, сгенерированная Swift, выше
func addFilter(newFilter: GPUImageOutput!)
Это устраняет требование, согласно которому классы GPUImageOutput
соответствуют протоколу GPUImageInput
, что позволит пропускать несовместимые объекты (а затем сбой во время выполнения). Когда я пытаюсь определить это как GPUImageOutput<GPUImageInput>
, компилятор выдает ошибку
Невозможно специализировать не общий тип "GPUImageOutput"
Как мне сделать такой класс и специализацию протокола в параметре в Swift?