OC與Swift混編
Swift發展勢頭越來越好,而很多公司很難一下子從OC全部切換到swift,這個時候混編就顯得那麼的重要,本人也在逐漸的嘗試混編然後逐步取代OC,從而全部轉到swift上。
其實,從2014年swift剛出來的時候就開始研究swift的相關文法及定義了,但是由於公司很難轉變,所以一直也沒有運用到實踐當中,這個時候就非常佩服那些小公司,或者應該叫初創公司,沒有任何的煩惱,新開發的app都是運用swift。。。非常羨慕。。。
好了,廢話不多說,看看用法吧。。
首先,我們有一個OC項目的工程,我這邊叫MixDemo,這個時候需要新增一個swift的類,與添加OC類一樣,只是選擇的語言選擇swift。
由於我的工程是OC的工程,添加一個swift檔案的時候,蘋果會問開發人員要不要添加一個bridge,我們需要添加這樣一個橋接。
這個時候我們會看到我們的工程裡面多了一個MixDemo-Bridging-Header.h的檔案。
我們在swift檔案中添加一個方法,返回一個字串:
class Test4SwiftVC: NSObject { func f1() -> String { return "Test Mix" }}那麼問題來了,如何在OC的.m檔案中調用該方法呢?
我們先看看工程檔案裡面的build Settings:
看到紅色標註出來的地方,預設是工程名稱-Swift.h,我們自訂為SwiftModule-Swift.h,以方以後修改工程名稱的時候出錯。這個檔案就是我們在OC類中調用swift類的引用標頭檔,這個類在工程中看不到,但是我們可以Command+點擊查看這個類的內容:
在OC的實現檔案中,引用該標頭檔,即可調用swift中的類了:
- (void)viewDidLoad { [super viewDidLoad]; Test4SwiftVC *VC = [[Test4SwiftVC alloc] init]; [VC f1]; // Do any additional setup after loading the view, typically from a nib.}這樣我們就可以在OC中調用swift中的f1方法了。
那麼在swift中怎麼調用OC的方法或者變數呢?
我們在ViewController中定義一個字串:
#import @interface ViewController : UIViewController@property (strong, nonatomic) NSString *str;@end
還記得我們一個的橋接檔案嗎?似乎我們還沒用到吧,這個時候就派上用場了。
我們在MixDemo-Bridging-Header.h中添加OC的標頭檔:
#import "ViewController.h"
然後在swift檔案中就可以引用啦。。。
func f2() { var vc = ViewController() var str: String = vc.str }
我們在swift中定義了第二個函數,定義一個變數vc去初始化ViewController這個類,然後定義一個String類型的變數來接收OC類中的參數,這樣就可以互相調用啦,調用OC中的函數也是同樣的道理,大家可以自己去研究。。。