swift與oc混編

來源:互聯網
上載者:User

標籤:報錯   png   style   ima   sse   .sh   init   解決   方式   

需求

我們建立一個Swift類型的工程,由於種種原因,裡面會有一些OC類,OC類用到了項目中的某些Swift類,而Swift類又用到了這些OC類,怎麼解決?

解答

其實,Swift和OC檔案是可以共存在一個工程中的,我們只需要簡單的配置,和一些注意細節,就可以實現Swift和OC的混編。

步驟1:配置OC的橋接檔案

1、在Swift裡第一次建立OC的檔案,會出現

注意:以後再建,或者是拖入的OC檔案,都不會有這個提示。

自己拖入的OC檔案,需要手動設定橋接檔案。

2、系統會自動建立一個標頭檔:工程名-Bridging-Header.h

3、如果想自訂這個標頭檔,把系統自動建立的刪除,建立標頭檔:

4、配置自己的標頭檔:

步驟2:Swift調用OC代碼

1、在橋接標頭檔裡匯入OC的標頭檔

2、OC檔案對外提供一個方法

1 #import <UIKit/UIKit.h>2 3 @interface OCVC : UIViewController4 5     - (void)showOCInfo;6 7 @end
 1 #import "OCVC.h" 2  3 @interface OCVC () 4  5 @end 6  7 @implementation OCVC 8  9 - (void)viewDidLoad {10     [super viewDidLoad];11 }12 13 - (void)showOCInfo{14     NSLog(@"這是OC的方法");15 }16 17 @end

3、swift直接使用swift的代碼風格調用OC的方法就可以

 1 import UIKit 2  3 class SwiftVC: UIViewController { 4  5     override func viewDidLoad() { 6         super.viewDidLoad() 7         view.backgroundColor = UIColor.white 8     } 9     10     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {11         12         // 建立OC控制器對象13         let ocVC = OCVC()14         15         // 調用OC控制器對象的方法16         ocVC.showOCInfo()17     }18 }
步驟3:如果工程中的OC檔案想使用某些Swift的檔案,需要配置工程的swift標頭檔(系統產生:工程中找不到,但可以通過方法或屬性點進去)

1、swift提供方法或屬性,供外界調用

 1 import UIKit 2  3 class SwiftVC: UIViewController { 4  5     override func viewDidLoad() { 6         super.viewDidLoad() 7         view.backgroundColor = UIColor.white 8     } 9     10     func showSwiftInfo() -> Void {11         print("這是Swift方法")12     }13 }

2、oc的.m檔案先匯入標頭檔,才可以調用,注意:一定是.m檔案匯入,而非.h匯入

 

#import "OCVC.h"// 標頭檔:工程名-swift.h// 注意了啊,這裡導標頭檔的時候,只能.m檔案中匯入,.h中不能匯入,否則會報錯// 還有,如果swift中聲明的屬性為 可選屬性(?),那麼對應的oc的標頭檔是不會有這個屬性的)#import "test-swift.h"

 

這時候,進行編譯,有可能會出錯,也有可能不會出錯,如果出錯的話,我們還需要手動設定一下。

我們可以先嘗試配置ProdctName,一般都不會有問題,如果還是不行,再嘗試配置ProductModuleName,然後進行編譯。

3、這時候,我們的OC檔案就可以愉快的使用OC的方式調用Swift代碼了

 1 #import "OCVC.h" 2 // 標頭檔:工程名-swift.h 3  4 // 注意了啊,這裡導標頭檔的時候,只能.m檔案中匯入,.h中不能匯入,否則會報錯 5  6 // 還有,如果swift中聲明的屬性為 ?(即可選屬性,那麼對應的oc的標頭檔是不會有這個屬性的) 7  8 #import "test-swift.h" 9 10 @interface OCVC ()11 12 @end13 14 @implementation OCVC15 16 - (void)viewDidLoad {17     [super viewDidLoad];18     self.view.backgroundColor = [UIColor whiteColor];19 }20 21 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event22 {23     // 建立swift的控制器對象24     SwiftVC *swiftVC = [[SwiftVC alloc] init];25     26     // 調用swift控制器對象的方法27     [swiftVC showSwiftInfo];28 }29 30 @end

 

 

swift與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.