OC與Swift混編

來源:互聯網
上載者:User

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中的函數也是同樣的道理,大家可以自己去研究。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.