1、@objc
Swift 的静态语言特性,每个函数的调用在编译期间就可以确定。因此在编译完成后可以检测出没有被调用到的 swift 函数,优化删除后可以减小最后二进制文件的大小。
而OC是动态语言,函数的调用在运行时才能确定有没有被调用。所以为了避免OC找不到swift的函数,添加 @objc 的方法表示这个方法是被OC调用的,这样swift在编译的时候,虽然检测到这个函数暂时没有被调用,但是也不会被优化删除,编译进项目-Swift文件中。
作用:把函数编译进项目-Swift文件中。
这样在OC调用swift的方法的时候就不会报找不到这个方法了。
2、下划线 _
忽略参数名(show me code)
eg:
2.1加下划线
@objc func OnLocalVideoInit(_ session: AVCaptureSession)
生成的OC函数名是:
- (void)OnLocalVideoInit:(AVCaptureSession * _Nonnull)session;
2.2不加下划线
@objc func OnLocalVideoInit(session: AVCaptureSession)
生成的OC函数名是:
- (void)OnLocalVideoInitWithSession:(AVCaptureSession * _Nonnull)session;
通过2.1和2.2的例子可以很清晰的看出下划线在OC和Swift混编中的作用了
网友评论