如何在OC中使用Swift中定义的protocol
在iOS开发中delegate常常用于几个对象之间信息的传递以及交互,比如UITableView的delegate。在混编项目中,有时候会需要OC实现Swift定义的protocol,然后在Swift中调用OC实现的函数。通常我们定义一个protocol很简单

1
2
3
protocol TestProtocol {
func load()
}

不过这样定义的protocol是无法被OC对象直接利用的,因为OC的protocol和Swift的protocol已经是截然不同的两个东西Swift定义的protocl并不能够通过自动编译产生一个供OC调用的接口,你需要在protocol之前加上@objc

1
2
3
@objc protocol TestProtocol {
func load()
}

然后当你在OC的.h文件中给类添加protocol时,就有代码提示了,但是添加完后还是会报错提示无法找到该协议,这是因为#import Project-Swift.h只能被添加在.m文件中,所以你只能在.m文件中声明该类实现了这个protocol

1
2
3
4
5
@interface MyClass() <TestProtocol>
- (void) load;
@end

这样的话Swift中就能执行delegate.load()了。