OC與swift相互呼叫
阿新 • • 發佈:2018-11-07
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.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