一、OC調(diào)用swift文件
在OC項(xiàng)目中創(chuàng)建一個(gè)swift文件的時(shí)候,Xcode 會(huì)提示 需要?jiǎng)?chuàng)建一個(gè)橋接文件,如下圖:

點(diǎn)確定創(chuàng)建橋接文件,Xcode會(huì)自動(dòng)創(chuàng)建一個(gè)橋接文件,其名字為:工程名-Bridging-Header.h

這個(gè)橋接文件是 swift 調(diào)用OC文件的時(shí)候用的
1.配置
進(jìn)入TARGETS ->Build Settings -> Packaging 中設(shè)置Defines Module為YES。

2. 創(chuàng)建xxx.swift文件類:
import UIKit
class Tools: NSObject {
var address:String
var gender:String
init(address:String,gender:String) {
self.address = address
self.gender = gender
}
func methodprintOC(){
print("msg:\(self.address) + \(self.gender)")
}
}
3.文件導(dǎo)入
在OC需要用到的swift文件中 導(dǎo)入文件 "Product Module Name -Swift.h" 因?yàn)?Product Module Name 默認(rèn)是工程的名字。所以直接導(dǎo)入 #import "工程名-Swift.h",【該文件沒(méi)有提示、是能手寫補(bǔ)充】
#import "ViewController.h"
#import "OCBrigdeSwiftDemo-Swift.h"
4.方法調(diào)用
記著寫完先command+B編譯一下,如果沒(méi)有報(bào)錯(cuò)就可以在OC文件調(diào)用swift中的類了
#import "ViewController.h"
#import "OCBrigdeSwiftDemo-Swift.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self ocBridgeSwift];
}
#pragma mark - method
///oc初始化調(diào)用swift方法
-(void)ocBridgeSwift{
Tools *tools = [[Tools alloc]initWithAddress:@"地址" gender:@"性別"];
[tools methodprintOC];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
二、swift調(diào)用OC文件
- 只要把swift需要用到的OC文件的頭文件放到橋接文件里 工程名-Bridging-Header.h
示例:
1、創(chuàng)建一個(gè)oc的文件(OTools)
+(void)logWithAddress:(NSString *)address gender:(NSString *)gender{
NSLog(@"打印日志:\n 地址:%@ 性別:%@",address,gender);
}
-(void)logByAddress:(NSString *)address gender:(NSString *)gender{
[OTools logWithAddress:address gender:gender];
}
2、在 xxx-Header.h文件中添加頭文件
#import "OTools.h"
3、調(diào)用
command+s [混編時(shí),每次代碼更新都要保存,不然無(wú)法調(diào)用]保存文件
override func viewDidLoad() {
super.viewDidLoad()
self.initBaseData();
}
func initBaseData(){
OTools .log(withAddress: "北京市", gender: "男");
let tools = OTools.init()
tools.log(byAddress: "福建省", gender: "女");
}
三、注意和總結(jié)
注意:
1、OC項(xiàng)目在導(dǎo)入swift文件前 先按照系統(tǒng)提示創(chuàng)建橋接文件,
2、在 targets -> Build Settings -> Packaging 中設(shè)置Defines Module 為YES
3、OC中調(diào)用swift文件需要導(dǎo)入”工程名 -Swift.h"
(這個(gè)是build Setting -> Packaging->Product Module Name 的名字,而這個(gè)屬性默認(rèn)是工程的名字)
4、每次寫完記得command + B 編譯 一下
5、swift項(xiàng)目 引用OC文件也需要?jiǎng)?chuàng)建 橋接文件,在這個(gè)橋接文件中導(dǎo)入OC文件的頭文件
6、橋接文件只有一個(gè),作用只是為了 swift 引用OC文件,OC引用swift 文件雖然也需要?jiǎng)?chuàng)建橋接文件,但是不需要在橋接文件中 導(dǎo)入swift文件
7、如果一個(gè)項(xiàng)目既有OC引用swift也有swift引用OC,就先設(shè)置OC調(diào)用swift文件,在橋接文件 導(dǎo)入OC文件,OC可以定義PCH文件導(dǎo)入”工程名 -Swift.h"
四、自定義橋接文件
如果不用Xcode提示創(chuàng)建橋接文件也可以自定義一個(gè)橋接文件
1、使用 Header File 創(chuàng)建,把里面的內(nèi)容清空。
2、這文件名可以自定義, 一般還是用工程名-Bridging-Header.h。
3、然后在 Build Setting -> Bridging Header 中 設(shè)置Objective-C Bridging Header 為自定義的橋接文件相對(duì)于工程的絕對(duì)路徑,也就是項(xiàng)目總文件夾的路徑,如果在第一層,就直接寫自定義的橋接文件的名file.h,如果在下一層,文件夾/橋接文件 app/file.h
4、最后進(jìn)入TARGETS ->Build Settings -> Packaging 中設(shè)置Defines Module為YES
- 記:oc與swift之間的屬性傳值、代理傳值、代碼塊、方法調(diào)用、通知調(diào)用,請(qǐng)參考:OC與swift的數(shù)據(jù)傳輸
- 源碼地址:https://gitee.com/chenzm_186/OCBrigdeSwiftDemo