OC與swift相互調用


OC與swift相互調用

一、OC調用swift文件

二、swift調用OC文件

三、注意和總結

添加:

四、自定義橋接文件 

一、OC調用swift文件

  在OC項目中創建一個swift文件的時候,Xcode 會提示 需要創建一個橋接文件,點確定創建橋接文件,Xcode會自動創建一個橋接文件

名字:工程名-Bridging-Header.h

這個橋接文件是 swift 調用OC文件的時候用的

1、

  進入TARGETS ->Build Settings -> Packaging 中

設置Defines Module為YES

設置 Product Module Name ,也可以不設置,默認為工程的名字。這個在后面會用到

2、

  在swift寫一個類

注意這個類一定要繼承NSObject,不然在OC中沒法用

class hello: NSObject {

    var address : String
    var gender: String
   
    init(address:String,gender:String){
        self.address = address
        self.gender = gender
    }
   
    func method() {
        print("message \(self.address + self.gender)")
    }
}

3、

  在OC需要用到的swift文件中 導入文件  "Product Module Name -Swift.h"  因為 Product Module Name 默認是工程的名字

所以直接導入 #import "工程名-Swift.h"

4、

  記着寫完先command +B編譯一下,如果沒有報錯就可以在OC文件調用swift中的類了

hello *helloss = [[helloalloc]initWithAddress:@"上海"gender:@"男"];
[helloss method];

 

二、swift調用OC文件

  在swift項目中創建一個OC文件的時候,Xcode 會提示創建一個橋接文件 點確定創建橋接文件,Xcode會自動創建一個橋接文件

名字:工程名-Bridging-Header.h

  把swift需要用到的OC文件的頭文件放到橋接文件里 工程名-Bridging-Header.h

例如:

1、

這個就是一個OC文件
//#import "sec.h"
#import <UIKit/UIKit.h>
@interface sec : UIViewController
-(void)actionMake;
@end
 

2、

在橋接文件中把需要用到OC的頭文件導入進去
#import "sec.h"
 

3、

編譯一下,就可以在swift中用swift的語法調用OC文件的方法了
let second = sec()
second.actionMake()

 

三、注意和總結

注意:

1、OC項目在導入swift文件前 先按照系統提示創建橋接文件,
2、在 targets -> Build Settings -> Packaging  中設置Defines Module 為YES
3、在OC中調用swift文件的時候,swift中的類 要繼承NSObject
不然沒辦法在OC中調用
4、OC中調用swift文件需要導入”工程名 -Swift.h"
     (這個是build Setting -> Packaging->Product Module Name 的名字,而這個屬性默認是工程的名字)
5、寫完記得command + B 編譯 一下
6、swift項目 引用OC文件也需要創建 橋接文件,在這個橋接文件中導入OC文件的頭文件
7、橋接文件只有一個,作用只是為了 swift 引用OC文件,OC引用swift 文件雖然也需要創建橋接文件
        但是不需要在橋接文件中 導入swift文件
8、如果一個項目既有OC引用swift 也有swift引用OC ,就先設置OC調用swift文件
     在橋接文件 導入OC文件,OC可以定義PCH文件導入”工程名 -Swift.h" 

 

 

四、自定義橋接文件 

 

如果不用Xcode提示創建橋接文件也可以自定義一個橋接文件

 

1     使用 Header File  把里面的內容清空。

 

2、 這文件名可以自定義, 一般還是用 工程名-Bridging-Header.h   例如app - file.h

 

3    然后在 Build Setting -> Swift Compiler - Code Generation中

 

4、設置Objective-C Bridging Header 為自定義的橋接文件相對於工程的絕對路徑,也就是項目總文件夾的路徑,如果在第一層,就直接寫自定義的橋接文件的名file.h,如果在下一層,文件夾/橋接文件 app/file.h 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM