1.Swift為什么有可選類型值?
如果一個常量草巡,或變量守呜,它的值可能存在,也可能不存在,那么可以定義這個值為可選類型值查乒。這樣做的好處就是弥喉,它不存在的時候,自動為nil(swift里面nil跟OC中不一樣玛迄,swift的nil指可選類型值不存在由境,OC中的nil指對象為空)。
我的理解是蓖议,可選類型值虏杰,是普通的常量或變量做了封裝,加了個殼勒虾,如果要用這個值纺阔,就需要解包。
2.在結(jié)構(gòu)體內(nèi)部方法中如果修改了結(jié)構(gòu)體的成員修然,那么該方法之前應(yīng)該加入的關(guān)鍵字是什么州弟?
答案:mutating
由于結(jié)構(gòu)體是值類型,Swift規(guī)定不能直接在結(jié)構(gòu)體的方法(初始化器除外)中修改成員低零。原因很簡單,結(jié)構(gòu)體作為值的一種表現(xiàn)類型怎么能提供改變自己值的方法呢拯杠,但是使用mutating
我們便可以辦到這點掏婶,當(dāng)然這也是和類的不同點
3.Swift中enum、struct潭陪、class三者異同
枚舉雄妥、結(jié)構(gòu)體、類的共同點:
1依溯,定義屬性和方法老厌;
2,下標(biāo)語法訪問值黎炉;
3枝秤,初始化器;
4慷嗜,支持擴展增加功能淀弹;
5,可以遵循協(xié)議庆械;類特有的功能:
1薇溃,繼承;
2缭乘,允許類型轉(zhuǎn)換沐序;
3,析構(gòu)方法釋放資源;
4策幼,引用計數(shù)邑时;類是引用類型
引用類型(reference types,通常是類)被復(fù)制的時候其實復(fù)制的是一份引用垄惧,兩份引用指向同一個對象刁愿。所以在修改一個實例的數(shù)據(jù)時副本的數(shù)據(jù)也被修改了。枚舉到逊,結(jié)構(gòu)體是值類型
值類型(value types)的每一個實例都有一份屬于自己的數(shù)據(jù)铣口,在復(fù)制時修改一個實例的數(shù)據(jù)并不影響副本的數(shù)據(jù)。值類型和引用類型是這三兄弟最本質(zhì)的區(qū)別觉壶。
當(dāng)你使用Cocoa框架的時候脑题,很多API都要通過NSObject的子類使用,所以這>時候必須要用到引用類型class铜靶。在其他情況下叔遂,有下面幾個準(zhǔn)則:
什么時候該用值類型:
要用==運算符來比較實例的數(shù)據(jù)時
你希望那個實例的拷貝能保持獨立的狀態(tài)時
數(shù)據(jù)會被多個線程使用時
什么時候該用引用類型(class):
要用==運算符來比較實例身份的時候
你希望有創(chuàng)建一個共享的、可變對象的時候