在OC項(xiàng)目中,有可能會(huì)遇到需要引入Swift寫的第三方庫。在Swift項(xiàng)目中,也有可能會(huì)遇到需要引入OC寫的第三方庫,下面整理了具體過程。
混編說明
| 引入方式 | 說明 |
|---|---|
Swift訪問OC
|
Swift中引入OC的類、Frameworks、CocoaPods引入三方庫等,都不需要每次需要使用時(shí)import,只需要統(tǒng)一在橋接文件ProductName-Bridging-Header.h中導(dǎo)入需要暴露給Swift使用的,即可在Swift中使用OC了 |
OC訪問Swift
|
OC中引入Swift,需要做一些配置,然后在在OC中需要的地方導(dǎo)入ProductName-Swift.h文件,即可在OC中訪問Swift中暴露給OC的屬性和方法。 |
注:ProductName是當(dāng)前工程名
Swift引入OC
-
新建一個(gè)
Swift工程SwiftAddOC,新建一個(gè)OC的類,Xcode會(huì)提醒你是否創(chuàng)建一個(gè)橋接文件,選擇Create Bridging Header,Xcode會(huì)自動(dòng)幫我們給Target建立對(duì)應(yīng)的橋接文件,選擇Don't Create,則需要我們自己創(chuàng)建橋接文件,然后在Xcode的配置中配置橋接文件路徑。注:
橋接文件是用于在Swift中訪問OC的類,名稱為ProductName-Bridging-Header.h


- 無論是自己創(chuàng)建的
OC類或者CocoaPods導(dǎo)入的,只需要在橋接文件中導(dǎo)入Swift需要訪問的OC類和三方的頭文件,這樣所以Swift文件都能訪問相應(yīng)的OC類了


OC引入Swift
-
新建一個(gè)
OC工程OCAddSwift,新建一個(gè)Swift的類,Xcode會(huì)提醒你是否創(chuàng)建一個(gè)橋接文件,選擇Create Bridging Header,Xcode會(huì)自動(dòng)幫我們給Target建立對(duì)應(yīng)的橋接文件,橋接文件對(duì)于OC引入Swift沒有什么作用。
選擇是否建立橋接文件 在
Targets下Build Settings設(shè)置Defines Modules為YES

-
由于
Xcode會(huì)根據(jù)的Target的創(chuàng)建Swift轉(zhuǎn)換OC下生的成接口頭文件’,英文:Objective-C Generated interface Header Name
Objective-C Generated interface Header Name.png -
新建一個(gè)
SwiftTest的Swift文件,寫一個(gè)Swift的函數(shù)注意:
Swift的類需要能夠被OC調(diào)用,那么它暴露給OC的方法和屬性前面必須添加@objc,如下圖

-
OC中調(diào)用Swift方法,必須在文件中導(dǎo)入ProductName-Swift.h,這個(gè)是不會(huì)聯(lián)想的,必須手動(dòng)輸入,如下圖
OC調(diào)用Swift方法
注意:中途我們可能需要改項(xiàng)目的名稱,那樣可能會(huì)導(dǎo)致報(bào)錯(cuò),如下
'ProductName-Swift.h' file not found
這時(shí)候我們需要在info.plist加入Bundle display name,然后寫入相應(yīng)需要更改名稱即可。
OC引入Swift的framework
- 同上設(shè)置一遍,然后將相應(yīng)的framework導(dǎo)入到工程中

- 在
Project->General->Embedded Binaries下添加進(jìn)去相應(yīng)的framework,Linked Frameworks and Libraries中刪除多余的

- 導(dǎo)入
#import <AWSDK/AWSDK-Swift.h>而不是#import <AWSDK/AWSDK.h>``#import <AWSDK/AWSDK-Swift.h>是OC項(xiàng)目導(dǎo)入Swift Framework時(shí)自動(dòng)產(chǎn)生的文件,給我們展示可以用哪些接口,這時(shí)候技能調(diào)用Swift Framework中的方法了

OC項(xiàng)目中使用Swift版的pod
在Podfile文件中添加 use_frameworks!
- 用cocoapods 導(dǎo)入swift庫時(shí) 到 swift項(xiàng)目和OC項(xiàng)目都必須要 use_frameworks!
- 使用 dynamic frameworks,必須要在Podfile文件中添加 use_frameworks!
//Podfile文件
platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'
target 'xxx' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
use_frameworks!
end
注意??:OC項(xiàng)目中使用了use_frameworks!后#import "AFNetworking.h" 需要改成#import "AFNetworking/AFNetworking.h",類似的其他庫的引用方式都需要修改;
注意
-
Swift引入OC:必須建立橋接文件,橋接文件是用于在Swift中訪問OC的類,名稱格式為ProductName-Bridging-Header.h -
OC引入Swift:必須在文件中導(dǎo)入ProductName-Swift.h,另外Swift暴露給OC的方法和屬性前面必須添加@objc -
OC引入Swift的framework:Embedded Binaries下添加進(jìn)去相應(yīng)的framework,例如導(dǎo)入#import <AWSDK/AWSDK-Swift.h> -
OC項(xiàng)目中使用了use_frameworks!后#import "AFNetworking.h"需要改成#import "AFNetworking/AFNetworking.h",類似的其他庫的引用方式都需要修改;


