OC調用Swift4.0的各種坑

簡述:最近幾年蘋果主推swift,OC已經很少更新了,處于維護狀態。所以慢慢多了很多OC混編Swift的項目,但是其實swift調用OC還是挺簡單的,把OC項目慢慢轉成swift問題不大。swift可以算是OC更上層的語言,我這里說的坑都是關于Swift轉OC的,很奇葩吧,還有把Swift項目轉成OC的,一句話公司需求,懟得程序員無言以對。(廢話不多說了,后面全是罵項目經理和產品的。。。省略一萬字)

OC和Swift混編的基礎設置就不說了,可以看我之前的一個文章
http://www.lxweimin.com/p/69ba19692bae

一. OC調用Swift中的Class類這里

1.這個類必須是繼承NSObjec或者NSObjec的子類

2.Class前面要加@objcMembers (這個關鍵字是讓該類所有屬性和方法加上@objc),3.0之前是蘋果自動幫你加上的,據說嫌棄打包會偏大一些,后面改成玩家自己加。
例如:@objcMembers class CustomServiceTool: NSObject {}

3.類中的協議、枚舉、結構體這些東西的調用
① 協議:直接在前面加一個@objc
@objc protocol CustomServiceToolDelegate: NSObjectProtocol {}

②枚舉:試了一下,必須定義出Int類型,前面加@objc才能調用(畢竟swift的枚舉比OC強大太多)
@objc enum CPLineType: Int {
case schoolToHome = 0
case homeToSchool
case return
}

③結構體:在oc中是不能調用struct里面的內容的,你想在類似class前面加個@objc的方法加在struct前面是不行的,那但是我們又想在oc中調用struct的屬性,那怎么辦呢?我們只能夠再建一個類,在類里寫個方法來返回struct中的值

坑點:
1.每次在一個類前面加個@objcMembers的時候都需要重新編譯一遍才能打出提示(混編期間,報錯請不要懷疑自己的代碼,大部分編譯一下就沒事了。。。)
2.有種特殊的情況,比如我一個OC控制器中調用了swift寫的view,然后其他用swift寫的控制器需要調用OC控制器,這時候要是只是把OC控制器寫到橋接文件中是會報錯的。(這種就是混編項目比較變態的情況)------------解決辦法:swift寫的View用向前聲明( @class BannerView);
3.swift中的一些類型是OC沒有的,或者類型名字差不多但是類型完全不同
例如:
swift中的Int定義成可選類型的時候,這時候OC是調不了swift的Int類型,解決方式,定義普通Int型

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,198評論 4 61
  • 生日,對每個人來講,差不多是這一年之中最重要的日子。今天是文小瑜的生日,她原本想,作為一個三十幾歲的女人,上有老下...
    四月天02閱讀 827評論 0 0
  • 隨著WE的水晶被SSG攻破,伴隨著娃娃和米勒無可奈何的“恭喜三星”的聲音響起,本土賽區LPL在這場在中國全程舉辦的...
    _慕情_閱讀 220評論 0 1
  • 挑燈夜談,凌晨才結束,勿掛念,一切安好,早安!
    何時再出發閱讀 128評論 0 0