結(jié)構(gòu)體和類(lèi)是通用的靈活結(jié)構(gòu)铃绒,它們成為程序代碼的構(gòu)建塊。您可以定義屬性和方法户秤,以使用與定義常量码秉,變量和函數(shù)相同的語(yǔ)法向結(jié)構(gòu)和類(lèi)添加功能。
Swift中的結(jié)構(gòu)和類(lèi)有很多共同點(diǎn)鸡号。
定義屬性以存儲(chǔ)值
定義提供功能的方法
定義下標(biāo)以使用下標(biāo)語(yǔ)法提供對(duì)其值的訪問(wèn)
定義初始化程序以設(shè)置其初始狀態(tài)
擴(kuò)展以擴(kuò)展其功能转砖,超出默認(rèn)實(shí)現(xiàn)
符合協(xié)議以提供某種標(biāo)準(zhǔn)功能
類(lèi)具有結(jié)構(gòu)體沒(méi)有的其他功能:
繼承使一個(gè)類(lèi)可以繼承另一個(gè)類(lèi)的特征。
類(lèi)型轉(zhuǎn)換使您可以在運(yùn)行時(shí)檢查和解釋類(lèi)實(shí)例的類(lèi)型鲸伴。
析構(gòu)程序使類(lèi)的實(shí)例可以釋放其已分配的所有資源府蔗。
引用計(jì)數(shù)允許對(duì)一個(gè)類(lèi)實(shí)例進(jìn)行多個(gè)引用。
結(jié)構(gòu)體和枚舉是值類(lèi)型
Swift中的所有基本類(lèi)型(整數(shù)汞窗,浮點(diǎn)數(shù)姓赤,布爾值,字符串仲吏,數(shù)組和字典)都是值類(lèi)型模捂。
所有結(jié)構(gòu)體和枚舉都是Swift中的值類(lèi)型。這意味著您創(chuàng)建的任何結(jié)構(gòu)體和枚舉實(shí)例以及它們具有的任何值類(lèi)型作為屬性蜘矢,都將在它們?cè)诖a中傳遞時(shí)始終被復(fù)制狂男。
由標(biāo)準(zhǔn)庫(kù)(如數(shù)組,字典和字符串)定義的集合使用優(yōu)化來(lái)降低復(fù)制的性能成本品腹。這些集合不共享立即復(fù)制的功能岖食,而是共享存儲(chǔ)在原始實(shí)例和任何副本之間的元素的內(nèi)存。如果修改了集合的副本之一舞吭,則在修改之前就將元素復(fù)制泡垃。您在代碼中看到的行為始終就像是立即進(jìn)行了復(fù)制一樣。
類(lèi)是引用類(lèi)型
身份運(yùn)算符
因?yàn)轭?lèi)是引用類(lèi)型羡鸥,所以多個(gè)常量和變量有可能在幕后引用類(lèi)的同一單個(gè)實(shí)例蔑穴。(對(duì)于結(jié)構(gòu)和枚舉,情況并非如此惧浴,因?yàn)樵趯⑺鼈兎峙浣o常量或變量或傳遞給函數(shù)時(shí)存和,它們總是被復(fù)制。)
有時(shí)找出兩個(gè)常量或變量是否引用了類(lèi)的完全相同實(shí)例有時(shí)會(huì)很有用衷旅。為此捐腿,Swift提供了兩個(gè)身份運(yùn)算符:
與(===)相同
與(!==)不同