我目前正在一个主要是Objective-C的项目中编写一些Swift代码。在我们的ObjC代码中,我们有一个声明为的标头typedef GPUImageOutput<GPUImageInput> MyFilter;。然后,我们可以声明一个@property,它只能是GPUImageOutput实现的子类GPUImageInput。
typedef GPUImageOutput<GPUImageInput> MyFilter;
GPUImageOutput
GPUImageInput
(注意:GPUImageOutput并且GPUImageInput不是我定义的;它们是GPUImage库的一部分)
即使标头是在导入的标头中#import的,我们的Swift代码似乎也无法识别这一点。我试图在Swift中复制声明,但是这些都不是正确的语法: typealias MyFilter = GPUImageOutput, GPUImageInput typealias MyFilter = GPUImageOutput : GPUImageInput
typealias MyFilter = GPUImageOutput, GPUImageInput
typealias MyFilter = GPUImageOutput : GPUImageInput
在Swift 4中,您可以使用新的&符号(在确认UIViewController和UITableViewDataSource的参数示例下面:
func foo(vc: UIViewController & UITableViewDataSource) { // access UIViewController property let view = vc.view // call UITableViewDataSource method let sections = vc.numberOfSectionsInTableView?(tableView) }