一. 創(chuàng)建Objective-C混編橋接文件
當(dāng)Swift與OC混編時(shí),需要?jiǎng)?chuàng)建橋接文件,才能在OC中使用Swift, 或者在Swift中使用OC的一些文件,橋接文件的默認(rèn)命名規(guī)則是 fileName-Brigding-Header.h
fileName: 自定義文件名稱
-Brigding-Header.h : 固定寫法
也可以不按此規(guī)則, 根據(jù)自己需求自定義, 沒有影響;
下面就來看看具體的創(chuàng)建步驟:
1.1. 方式一: 自動(dòng)生成
最簡(jiǎn)單的創(chuàng)建方法就是, 在Swift項(xiàng)目中新建一個(gè)OC的文件, 或者在一個(gè)OC的項(xiàng)目中新建一個(gè)Swift文件, Xcode都會(huì)自動(dòng)提示, 是否創(chuàng)建Header, 點(diǎn)擊新建即可;
1.2. 方式二: 手動(dòng)創(chuàng)建
手動(dòng)創(chuàng)建需要兩步:
1.2.1. 創(chuàng)建頭文件
左側(cè)文件列表,右鍵選擇New File... -->選擇Header File
下一步,起個(gè)文件名稱,這里是: Test-Brigding-Header
新建的文件如下:
1.2.2. 配置路徑
接下來配置橋接文件的路徑:
來到項(xiàng)目的Build Settings,搜索 bridging,回車;
在Swift Compiler-General中選擇Objective-C Bridging Header
右側(cè)空白處,雙擊在彈出框中輸入橋接文件的路徑: 文件路徑/文件名稱
這里的橋接文件在HeaderBridgeTest文件夾下,
所以只需輸入:HeaderBridgeTest/Test-Brigding-Header.h
編譯,無報(bào)錯(cuò),即添加成功.
PS:如果橋接文件在其他的文件夾下,路徑中要添加上這層文件夾,例如:
這里將橋接文件放在Test文件夾下,路徑中多了一層Test文件夾.
注意:
在添加橋接路徑的時(shí)候,有的人說,可以直接將橋接文件拖拽到彈出框內(nèi),自動(dòng)生成一個(gè)完整路徑,如下:
這樣雖然也可以添加,編譯也沒用問題,但是一旦換一臺(tái)電腦,運(yùn)行此項(xiàng)目,肯定會(huì)報(bào)路徑錯(cuò)誤,所以這種方式是不可取的.
二. Swift中使用OC的類庫(kù)
如果在Swift項(xiàng)目使用OC語(yǔ)言的類庫(kù), 只需要把要使用的OC文件的頭文件添加到這個(gè)橋接文件即可,這里添加了MBProgressHUD:
PS: 如果是使用cocoapods管理的OC的第三方庫(kù), 在引用頭文件的時(shí)候, 要加上外層文件夾路徑, 例如這里的MBProgressHUD如果是使用cocoapods加載, 應(yīng)該這樣在橋接文件引用頭文件:
#import "MBProgressHUD/MBProgressHUD.h"
然后在需要的地方,直接使用即可:
如果在使用時(shí),沒有代碼補(bǔ)全提示,或者強(qiáng)打后,報(bào)錯(cuò),可Clean一下項(xiàng)目,再使用...
三. OC項(xiàng)目中使用Swift文件
如果在OC項(xiàng)目中使用Swift文件, 依然需要添加這個(gè)橋接文件, 但是不在里面引入Swift的頭文件(Swift也沒有頭文件),而是引用:
#import "項(xiàng)目名稱-Swift.h"
這里是默認(rèn)名稱, 如果添加橋接文件后, 沒有做任何更改, 直接這么寫就行, 例如下面這個(gè)項(xiàng)目:
這是一個(gè)OC的項(xiàng)目, 我新建了一個(gè)SwiftPeople.swift文件:
class SwiftPeople: NSObject {
var name = ""
var age = 0
init(_ name: String, age: Int) {
self.name = name
self.age = age
}
func isCanWork() {
if self.age >= 18 {
print("\(name), 您好!\n恭喜您, 可以參加工作!")
} else {
print("\(name), 您好!\n抱歉, 您未滿18歲, 不能參加工作!")
}
}
}
注意: 如果想在OC中使用Swift自定義的類, 這個(gè)自定義的類需要繼承自NSObject, 否則是無法使用的.
使用的時(shí)候可以按照下面的方式:
#import "ViewController.h"
#import "Test-Swift.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
SwiftPeople *people = [[SwiftPeople alloc]init:@"張三" age:16];
[people isCanWork];
}
@end
運(yùn)行會(huì)輸出:
張三, 您好!
抱歉, 您未滿18歲, 不能參加工作!
上面是使用的默認(rèn)的文件名稱, 即:
#import "Test-Swift.h"
這個(gè)可以根據(jù)自己的需求修改的:
在 Build Settings 搜索: Product Module Name
這里是默認(rèn)的 Test, 可以修改為你要的名稱, 例如: MyTest :
使用的時(shí)候就需要引入頭文件:
#import "MyTest-Swift.h"
上面例子可改寫為:
#import "ViewController.h"
#import "MyTest-Swift.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
SwiftPeople *people = [[SwiftPeople alloc]init:@"張三" age:16];
[people isCanWork];
}
@end
(完)
Github | LQQZYY |
CSDN博客 | 流火緋瞳 |
新浪微博 | 杯水_滄海 |
302934443 |