前言
此Session
將重點(diǎn)講解如何讓Swift
與Objective-C
兩種不同的語(yǔ)言共同工作.
內(nèi)容
讓Swift文件使用Objective-C文件的API
Swift
完全支持和使用Objective-C
的框架Framework
;
在已有的Objective-C
文件中創(chuàng)建Swift
文件,Xcode
會(huì)提示需要?jiǎng)?chuàng)建一個(gè)工程名-Bridging -Header.h
格式的橋接頭文件,此文件用來(lái)聲明需要暴露給Swift
文件使用Objective-C API
的頭文件,由開(kāi)發(fā)者自己決定需要給Swift
文件引用的Objective-C
文件.若Xcode
未出現(xiàn)此提示,也可以自動(dòng)創(chuàng)建橋接頭文件,然后在項(xiàng)目target
的building setting
中搜索header
后找到Bridging header
選項(xiàng),手動(dòng)添加自己的橋接文件相對(duì)路徑.
Objective-C文件使用Swift文件的API
在Swift
文件里聲明的協(xié)議Protocol
,如要在Objective-C
文件中調(diào)用必須在協(xié)議聲明前添加@objc
關(guān)鍵字;
Xcode
會(huì)自動(dòng)生成頭文件用于將Swift
的API暴露給Objective-C
文件使用,該頭文件命名格式固定為"工程名-Swift.h",只需要先導(dǎo)入此頭文件就能使用所有Swift
文件的API
.
在Objective-C框架中使用Swift
給框架Target
添加Swift
文件時(shí)不會(huì)提示創(chuàng)建橋接文件,但能自動(dòng)獲取到當(dāng)前框架的其他文件所有API
進(jìn)行調(diào)用,這是系統(tǒng)自動(dòng)進(jìn)行的編譯優(yōu)化和處理.
Objective-C
中的initWithXX
方法在轉(zhuǎn)化為Swift
方式,將自動(dòng)移除With
,生成init(XX
格式 (只針對(duì)init
方法的轉(zhuǎn)換)
h文件需要引用Swift
文件對(duì)象時(shí),使用@class
進(jìn)行導(dǎo)入;
m文件引用Swift
文件時(shí)使用固定格式FrameworkName/AppName-Swift.h
導(dǎo)入自動(dòng)生成的頭文件;
總結(jié)
在Objective-C
代碼與Swift
代碼相互交互的過(guò)程,Xcode
已經(jīng)足夠強(qiáng)大能夠自動(dòng)完成具體實(shí)現(xiàn)代碼的橋接功能,這也讓開(kāi)發(fā)者能更好地使用這兩種語(yǔ)言,而不會(huì)因?yàn)閮煞N語(yǔ)言的不同語(yǔ)法和特性而糾結(jié)過(guò)多的時(shí)間.