如何混編不用多說(shuō),蘋(píng)果對(duì)Swift 3.0以上的混編輔助已經(jīng)做得很方便了——無(wú)非是build settings中設(shè)置標(biāo)志,以及兩個(gè)文件,一個(gè)是系統(tǒng)或自己創(chuàng)建的bridge文件,用于Swift文件調(diào)用OC類(lèi)導(dǎo)入頭文件的橋接;一個(gè)是系統(tǒng)生成的xx-swift.h文件,這個(gè)連導(dǎo)入都不需要做,直接引用即可。
Swift的以O(shè)bject為基類(lèi)的集合類(lèi)型在傳遞時(shí)可能全部被深拷貝,而OC以NSObject為基類(lèi)的傳遞都是默認(rèn)指針傳遞。
Swift文件調(diào)用OC類(lèi)的屬性時(shí)不會(huì)編譯成可選類(lèi)型,因此當(dāng)該OC類(lèi)的屬性為空時(shí),而編譯器并不會(huì)給出提示,于是運(yùn)行時(shí)Swift代碼取值時(shí)會(huì)崩潰。所以一定要關(guān)注調(diào)用的OC屬性是否可能為nil,并相應(yīng)做判空處理。
混編后的App如果產(chǎn)生Swift文件內(nèi)的崩潰,在Bugly上無(wú)法生成有效的堆棧,可能會(huì)定位到具體的Swift函數(shù),但行數(shù)不確定。
個(gè)人認(rèn)為向Swift演進(jìn)的最大障礙是:由于兩種語(yǔ)言混編,并且Swift的ABI不穩(wěn)定,所以為了兼容所有系統(tǒng),包括Swift還沒(méi)有發(fā)明時(shí)的iOS 7,App打包時(shí)會(huì)把Swift運(yùn)行時(shí)庫(kù)全部加入進(jìn)包中,其中Swift Core, Foundation, Support等動(dòng)態(tài)庫(kù)有將近30多M,打ipa包時(shí)會(huì)比純OC多出10多M;而解壓安裝到本地后的占用空間更是要多出40,50M。
基本上領(lǐng)導(dǎo)和產(chǎn)品經(jīng)理們不會(huì)放過(guò)你的。
更新與更正:經(jīng)過(guò)實(shí)踐發(fā)現(xiàn),打包成提交App Store的ipa與企業(yè)分發(fā)的包略有區(qū)別,蘋(píng)果會(huì)對(duì)Store版本ipa進(jìn)行合理瘦身,因此這個(gè)問(wèn)題就不再是問(wèn)題了。夜