當(dāng)前swift正在逐步開(kāi)始流行,我們也需要與時(shí)俱進(jìn)澜倦,但是在項(xiàng)目中又不可能已下載把所有代碼進(jìn)行替換聚蝶,這就存在了混編的必然性。對(duì)于swift和OC的混編藻治,我說(shuō)一些自己認(rèn)為需要注意的地方碘勉。
- 可選類型:swift中最經(jīng)典的用法,需要注意的就是如果使用了!桩卵,一定不能夠?yàn)閚il验靡,否則將會(huì)crash;OC轉(zhuǎn)換時(shí)一般會(huì)為了簡(jiǎn)單雏节,把成員變量的類型定義為!胜嗓,那么一定要注意使用該變量時(shí)不可以為空。
-
相互引用:OC引用swift的類钩乍,需要在swift的類定義時(shí)添加@objc辞州,同時(shí)在.m文件中包含swift的對(duì)應(yīng)頭文件(
productName-swift.h
),這樣才可以正常使用寥粹;而swift引用OC的類变过,需要在bridge文件中包含對(duì)應(yīng)的頭文件,然后就可以在swift中調(diào)用涝涤。 - 宏定義:OC中的宏定義媚狰,在swift中一部分可以正常使用,也有很大一部分無(wú)法再正常使用阔拳,具體的可以參見(jiàn)OC&swift中的宏定義一文崭孤。
-
數(shù)據(jù)類型:OC中的所有對(duì)象都是一個(gè)指針,所以都可以進(jìn)行強(qiáng)制轉(zhuǎn)換糊肠,在swift中將不再允許這種使用辨宠;還有就是在swift中數(shù)字類型之間將不再進(jìn)行隱式轉(zhuǎn)換,都需要開(kāi)發(fā)者手動(dòng)進(jìn)行顯式的轉(zhuǎn)換罪针。
在swift中使用let定義常量時(shí)可以推斷類型,如果要設(shè)置為特定類型的話黄伊,還是需要添加數(shù)據(jù)類型泪酱,這一點(diǎn)和OC中的宏不同。比如要定義長(zhǎng)度為44,一定要使用let height:CGFloat = 44
墓阀,而不能夠使用let height = 44
毡惜,因?yàn)楹笳邔?huì)把height推斷為Int類型,導(dǎo)致后面使用的時(shí)候無(wú)法正常使用斯撮。 -
成員(函數(shù))可見(jiàn)性:在swift中经伙,不存在頭文件,所以在類中聲明的成員和函數(shù)都默認(rèn)是外部可見(jiàn)的勿锅,如果需要定義內(nèi)部的變量和函數(shù)帕膜,需要使用
private
關(guān)鍵字。 - delegate:?jiǎn)为?dú)說(shuō)delegate是因?yàn)閐elegate一般會(huì)定義為weak類型溢十,而在swift中由于不使用strong關(guān)鍵字垮刹,容易讓我們忽略了使用weak,導(dǎo)致循環(huán)引用张弛。注意在swift中同樣存在weak的使用荒典,在定義delegate時(shí)不要忘記添加。
- struct:swift中的struct在OC中沒(méi)有對(duì)應(yīng)的數(shù)據(jù)類型吞鸭,如果不是必須的話寺董,不建議在接口的地方使用struct。
-
初始化方法:swift中對(duì)于
UIViewController
刻剥,UIView
等類非繼承的初始化方法遮咖,都是用convenience
關(guān)鍵字,否則需要重新實(shí)現(xiàn)父類的初始化方法透敌。
目前想到就這幾點(diǎn)吧盯滚。