一. 創建Objective-C混編橋接文件
當Swift與OC混編時,需要創建橋接文件,才能在OC中使用Swift, 或者在Swift中使用OC的一些文件,橋接文件的默認命名規則是 fileName-Brigding-Header.h
fileName: 自定義文件名稱
-Brigding-Header.h : 固定寫法
也可以不按此規則, 根據自己需求自定義, 沒有影響;
下面就來看看具體的創建步驟:
1.1. 方式一: 自動生成
最簡單的創建方法就是, 在Swift項目中新建一個OC的文件, 或者在一個OC的項目中新建一個Swift文件, Xcode都會自動提示, 是否創建Header, 點擊新建即可;
1.2. 方式二: 手動創建
手動創建需要兩步:
1.2.1. 創建頭文件
左側文件列表,右鍵選擇New File... -->選擇Header File
下一步,起個文件名稱,這里是: Test-Brigding-Header
新建的文件如下:
1.2.2. 配置路徑
接下來配置橋接文件的路徑:
來到項目的Build Settings,搜索 bridging,回車;
在Swift Compiler-General中選擇Objective-C Bridging Header
右側空白處,雙擊在彈出框中輸入橋接文件的路徑: 文件路徑/文件名稱
這里的橋接文件在HeaderBridgeTest文件夾下,
所以只需輸入:HeaderBridgeTest/Test-Brigding-Header.h
編譯,無報錯,即添加成功.
PS:如果橋接文件在其他的文件夾下,路徑中要添加上這層文件夾,例如:
這里將橋接文件放在Test文件夾下,路徑中多了一層Test文件夾.
注意:
在添加橋接路徑的時候,有的人說,可以直接將橋接文件拖拽到彈出框內,自動生成一個完整路徑,如下:
這樣雖然也可以添加,編譯也沒用問題,但是一旦換一臺電腦,運行此項目,肯定會報路徑錯誤,所以這種方式是不可取的.
二. Swift中使用OC的類庫
如果在Swift項目使用OC語言的類庫, 只需要把要使用的OC文件的頭文件添加到這個橋接文件即可,這里添加了MBProgressHUD:
PS: 如果是使用cocoapods管理的OC的第三方庫, 在引用頭文件的時候, 要加上外層文件夾路徑, 例如這里的MBProgressHUD如果是使用cocoapods加載, 應該這樣在橋接文件引用頭文件:
#import "MBProgressHUD/MBProgressHUD.h"
然后在需要的地方,直接使用即可:
如果在使用時,沒有代碼補全提示,或者強打后,報錯,可Clean一下項目,再使用...
三. OC項目中使用Swift文件
如果在OC項目中使用Swift文件, 依然需要添加這個橋接文件, 但是不在里面引入Swift的頭文件(Swift也沒有頭文件),而是引用:
#import "項目名稱-Swift.h"
這里是默認名稱, 如果添加橋接文件后, 沒有做任何更改, 直接這么寫就行, 例如下面這個項目:
這是一個OC的項目, 我新建了一個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自定義的類, 這個自定義的類需要繼承自NSObject, 否則是無法使用的.
使用的時候可以按照下面的方式:
#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
運行會輸出:
張三, 您好!
抱歉, 您未滿18歲, 不能參加工作!
上面是使用的默認的文件名稱, 即:
#import "Test-Swift.h"
這個可以根據自己的需求修改的:
在 Build Settings 搜索: Product Module Name
這里是默認的 Test, 可以修改為你要的名稱, 例如: MyTest :
使用的時候就需要引入頭文件:
#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 |