什么是Swift相当于声明`typedef SomeClass <SomeProtocol> MyType`?

Dav*_*rns 5 objective-c ios gpuimage swift

我目前正在一个主要是Objective-C的项目中编写一些Swift代码.在我们的ObjC代码中,我们有一个声明的标头typedef GPUImageOutput<GPUImageInput> MyFilter;.然后我们可以声明一个只能是GPUImageOutput实现的子类的@property GPUImageInput.

(注:GPUImageOutputGPUImageInput是不是我定义的;它们是部分GPUImage库)

我们的Swift代码似乎没有认识到这一点,即使标题在我们的桥接标题中是#imported.我试图在Swift中复制声明,但这些都不是正确的语法:
typealias MyFilter = GPUImageOutput, GPUImageInput
typealias MyFilter = GPUImageOutput : GPUImageInput

Jer*_*ker 3

在 Swift 4 中,您可以使用新的 & 符号来实现此目的(下面是确认 UIViewController 和 UITableViewDataSource 的参数示例:

func foo(vc: UIViewController & UITableViewDataSource) {
    // access UIViewController property
    let view = vc.view
    // call UITableViewDataSource method
    let sections = vc.numberOfSectionsInTableView?(tableView)
}
Run Code Online (Sandbox Code Playgroud)