1. 程式人生 > >OC與swift相互呼叫

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