1、@objc
Swift 的靜態(tài)語言特性,每個函數(shù)的調用在編譯期間就可以確定。因此在編譯完成后可以檢測出沒有被調用到的 swift 函數(shù)击胜,優(yōu)化刪除后可以減小最后二進制文件的大小。
而OC是動態(tài)語言役纹,函數(shù)的調用在運行時才能確定有沒有被調用偶摔。所以為了避免OC找不到swift的函數(shù),添加 @objc 的方法表示這個方法是被OC調用的促脉,這樣swift在編譯的時候辰斋,雖然檢測到這個函數(shù)暫時沒有被調用策州,但是也不會被優(yōu)化刪除,編譯進項目-Swift文件中宫仗。
作用:把函數(shù)編譯進項目-Swift文件中够挂。
這樣在OC調用swift的方法的時候就不會報找不到這個方法了。
2藕夫、下劃線 _
忽略參數(shù)名(show me code)
eg:
2.1加下劃線
@objc func OnLocalVideoInit(_ session: AVCaptureSession)
生成的OC函數(shù)名是:
- (void)OnLocalVideoInit:(AVCaptureSession * _Nonnull)session;
2.2不加下劃線
@objc func OnLocalVideoInit(session: AVCaptureSession)
生成的OC函數(shù)名是:
- (void)OnLocalVideoInitWithSession:(AVCaptureSession * _Nonnull)session;
通過2.1和2.2的例子可以很清晰的看出下劃線在OC和Swift混編中的作用了