【发布时间】:2014-08-18 18:29:36
【问题描述】:
我想实现一个 Swift 方法,它接受某种类类型,但只接受那些符合特定协议的类的实例。例如,在 Objective-C 中我有这个方法:
- (void)addFilter:(GPUImageOutput<GPUImageInput> *)newFilter;
其中GPUImageOutput 是一个特定的类,GPUImageInput 是一个协议。只有符合此协议的 GPUImageOutput 类才是此方法可接受的输入。
但是,上述自动生成的 Swift 版本是
func addFilter(newFilter: GPUImageOutput!)
这消除了GPUImageOutput 类符合GPUImageInput 协议的要求,这将允许传入不符合要求的对象(然后在运行时崩溃)。当我尝试将其定义为GPUImageOutput<GPUImageInput> 时,编译器会抛出
无法专门化非泛型类型“GPUImageOutput”
如何在 Swift 中的参数中进行这样的类和协议特化?
【问题讨论】:
-
generic 方式有什么问题?
-
我相信我在这里发布的代码应该可以工作,如果它没有使编译器崩溃的话。我无法找到将类型用作变量的方法,除非它在泛型类中存储为
var filter: T。 openradar.appspot.com/radar?id=5258642664194048 -
@wjl 我注意到泛型始终出现同样的问题。 Xcode 会很好地编译代码,但是一旦使用该类,程序就会崩溃。苹果有没有回复你的错误报告?
-
@Zag:还没有回应(我可能会收到“嘿,这仍然坏了吗?”对于 beta 3)。你的问题有测试用例/openradar 吗?
标签: swift