swift 打包sdk_在封装SDK中Swift和OC混编之相互调用
oc和swift混編之相互調(diào)用.jpg
在非SDK中:
1、swift調(diào)用oc
步驟:
創(chuàng)建 工程名-Bridging-Header.h
放入oc的頭文件,swift即可調(diào)用
在swift項(xiàng)目中或者在oc項(xiàng)目中,創(chuàng)建oc或者swift文件,Xcode都會(huì)提示問你是否要?jiǎng)?chuàng)建橋接文件,點(diǎn)擊確認(rèn)Xcode就會(huì)自動(dòng)創(chuàng)建,名稱的格式是:工程名-Bridging-Header.h
把swift想要調(diào)用的oc的頭文件放在這個(gè)自動(dòng)創(chuàng)建的橋接的文件里面,就直接可以調(diào)用oc了。是不是很方便呢,當(dāng)然,如果系統(tǒng)提示的時(shí)候,你沒有調(diào)用,你也可以自己手動(dòng)創(chuàng)建。
手動(dòng)創(chuàng)建swift調(diào)用oc的頭文件,
步驟:
創(chuàng)建Header File,刪除里面內(nèi)容
工程名-Bridging-Header.h進(jìn)行命名,可自定義
在Build Setting -> Swift Compiler - Code Generation 中,拖入剛才自己手動(dòng)創(chuàng)建的文件,會(huì)自動(dòng)生成路徑。
2、oc調(diào)用swift
步驟:
Targets ->Build Settings -> Packaging中
設(shè)置 Defines Module 屬性為YES
同上路徑,設(shè)置Product Module Name,默認(rèn)為工程名稱,用來修改導(dǎo)入到oc文件中的頭文件的名稱,可不修改。
在需使用到swift的oc類中,導(dǎo)入系統(tǒng)自動(dòng)生成的Product Module Name(工程名)-Swift.h,即#import "工程名-Swift.h"
在swift暴露出來的方法和屬性上要加@objc,command B成功這樣才可以在oc中調(diào)用swift的類了。
注:1. swift中寫的類一定要集成于NSobject,否則無法調(diào)用
2. 如果多個(gè)oc類需要使用,則可以添加到PCH文件中
在封裝SDK中:
1、swift調(diào)用oc
iOS 制作framework時(shí),swift調(diào)用OC,不支持橋接,故得換一種方式調(diào)用。
步驟:
點(diǎn)擊target ->Build Settings -> Allow Non-modular Includes In Framework Modules 設(shè)置為YES
然后在 Build Phases 中 Headers 的把你想要調(diào)用的oc文件暴露到Public中去
然后在對(duì)外的統(tǒng)一接口文件中暴露這個(gè)頭文件,如下圖所示:
SDK中swift調(diào)用oc暴露方法.jpg
這樣設(shè)置完畢之后,你就可以愉快的調(diào)用啦!
2、oc調(diào)用swift
同樣的方式,在SDK中會(huì)提示找不到Product Module Name -Swift.h 這個(gè)頭文件
步驟:
這里需要將Product Module Name -Swift.h這個(gè)頭文件的引用改為引用#import 這個(gè)頭文件
【JWEmotionTrackeriOSSDK就是你封裝的SDK名稱】
總結(jié):oc通過xxx-swift.h調(diào)用swift【系統(tǒng)自動(dòng)生成】。swift通過xxx-Bridging-Header.h調(diào)用oc【系統(tǒng)提示生成或手動(dòng)創(chuàng)建】創(chuàng)建oc項(xiàng)目,xcode不會(huì)自動(dòng)創(chuàng)建橋接文件。需要先創(chuàng)建xxx-Bridging-Header.h,才會(huì)生成xxx-swift.h文件。這句話很重要,如果不創(chuàng)建橋接文件,那么會(huì)提示 添加好 頭文件之后 調(diào)用的時(shí)候,Bad receiver type XXX,這時(shí)候,需要手動(dòng)創(chuàng)建橋接文件。
總結(jié)
以上是生活随笔為你收集整理的swift 打包sdk_在封装SDK中Swift和OC混编之相互调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎么读单词和古文_Pytho
- 下一篇: java单词200个,请收藏!贼有用