swift - Class 與 struct相同點(diǎn)與不同點(diǎn)

Class 與 struct

結(jié)構(gòu)體和類作為一種通用而又靈活的結(jié)構(gòu)此洲,成為了人們構(gòu)建代碼的基礎(chǔ)。你可以使用定義常量娶桦、變量和函數(shù)的語法衷畦,為你的結(jié)構(gòu)體和類定義屬性知牌、添加方法祈争。

Class 與 struct 相同之處

1、定義屬性用于存儲(chǔ)值
2角寸、定義方法用于提供功能
3菩混、定義下標(biāo)操作用于通過下標(biāo)語法訪問它們的值
4忿墅、定義構(gòu)造器用于設(shè)置初始值
5、通過擴(kuò)展以增加默認(rèn)實(shí)現(xiàn)之外的功能
6沮峡、遵循協(xié)議以提供某種標(biāo)準(zhǔn)功能
7疚脐、類和結(jié)構(gòu)體在創(chuàng)建實(shí)例時(shí),必須為所有存儲(chǔ)型屬性設(shè)置合適的初始值
8邢疙、如果結(jié)構(gòu)體或類為所有屬性提供了默認(rèn)值棍弄,又沒有提供任何自定義的構(gòu)造器疟游,那么 Swift 會(huì)給這些結(jié)構(gòu)體或類提供一個(gè)默認(rèn)構(gòu)造器照卦。這個(gè)默認(rèn)構(gòu)造器將簡單地創(chuàng)建一個(gè)所有屬性值都設(shè)置為它們默認(rèn)值的實(shí)例

Class 與 struct 不同之處

對于類class和結(jié)構(gòu)體,主要理解的是他們的不同之處乡摹,這樣在平常的開發(fā)使用當(dāng)中役耕,可以清晰的知道什么時(shí)候用類class或者struct結(jié)構(gòu)體,下面就說說它們之間有哪些不同之處聪廉。
1瞬痘、class類可以繼承自父類,而struct結(jié)構(gòu)體不可以繼承板熊,如下代碼截圖


截屏2021-04-12 上午10.06.01.png

2框全、class類是引用類型,引用類型在被賦予到一個(gè)變量干签、常量或者被傳遞到一個(gè)函數(shù)時(shí)津辩,其值不會(huì)被拷貝。因此容劳,使用的是已存在實(shí)例的引用喘沿,而不是其拷貝。
struct結(jié)構(gòu)體是值類型竭贩,當(dāng)它被賦值給一個(gè)變量蚜印、常量或者被傳遞給一個(gè)函數(shù)的時(shí)候,其值會(huì)被拷貝留量。
看下面代碼截圖:


截屏2021-04-06 下午3.56.28.png

上面的代碼同時(shí)創(chuàng)建了一個(gè)結(jié)構(gòu)體StudentStruct和一個(gè)類StudentClass,并且都有一個(gè)變量iValue窄赋,在上面的代碼中,可以看到楼熄,分別創(chuàng)建了firstStruct結(jié)構(gòu)體對象和firstClass類對象忆绰,然后把這個(gè)兩個(gè)對象分別賦值給cpFirstStruct和cpFirstClass,在18和19代碼行可以看到可岂,更改了cpFirstStruct和cpFirstClass的值错敢,打印出來的結(jié)果是指向firstClass的值跟著變了,而firstStruct值還是沒變青柄。
接下來25和26行分別對firstClass和firstStruct賦新的值伐债,然后通過打印可以發(fā)現(xiàn)cpFirstClass的值改變了预侯,而cpFirstStruct的值沒有變。
通過上面這段代碼的實(shí)現(xiàn)結(jié)果峰锁,可以很好的證明萎馅,類class是引用類型,結(jié)構(gòu)體struct是值類型虹蒋,使用時(shí)是進(jìn)行的地址copy糜芳,而不是指向所引用的地址。
3魄衅、結(jié)構(gòu)體struct類型創(chuàng)建之后峭竣,都有一個(gè)自動(dòng)生成的成員逐一構(gòu)造器,用于初始化新結(jié)構(gòu)體實(shí)例中成員的屬性晃虫。而類class不會(huì)生成自動(dòng)生成成員逐一構(gòu)造器皆撩。如下代碼截圖:


截屏2021-04-12 上午10.36.22.png
截屏2021-04-12 上午10.36.40.png

通過上面的代碼可以看出,HelloStruct與HelloClass都沒有顯示的構(gòu)造器哲银,但是HelloStruct使用的時(shí)候扛吞,使用點(diǎn)“.”語法卻可以調(diào)用到一個(gè)成員逐一構(gòu)造器,HelloClass顯示的是init()或者報(bào)錯(cuò)荆责。
4滥比、class類有析構(gòu)過程,struct結(jié)構(gòu)體則沒有做院,使用析構(gòu)函數(shù)deinit分別在class類和struct結(jié)構(gòu)體中進(jìn)行調(diào)用盲泛,結(jié)果如下:


截屏2021-04-12 上午10.42.01.png

在struct結(jié)構(gòu)體中使用deinit函數(shù)會(huì)遭到錯(cuò)誤提示,所以struct結(jié)構(gòu)體中是不需要析構(gòu)過程键耕,因?yàn)閟truct結(jié)構(gòu)體是值類型寺滚。
5、class類中定義的變量時(shí)郁竟,變量如果不是可選類型玛迄?就必須給一個(gè)默認(rèn)值由境,struct結(jié)構(gòu)體則不需要棚亩。


截屏2021-04-12 上午10.50.57.png
截屏2021-04-12 上午10.51.23.png

第一段代碼中,class類中定義的變量都沒有賦初始值虏杰,也沒有明確是可選類型讥蟆,所以直接報(bào)錯(cuò),在第二段代碼中進(jìn)行設(shè)置纺阔,使用正常瘸彤。

總結(jié):class類和struct結(jié)構(gòu)體各有特性,在使用中笛钝,如果需要多處操作质况,數(shù)據(jù)共享可以考慮使用class類愕宋,如果對數(shù)據(jù)獨(dú)立性有要求,就可以使用struct結(jié)構(gòu)體结榄,在使用的過程中中贝,如果多處引用class類,并且對數(shù)據(jù)進(jìn)行修改臼朗,對于查看數(shù)據(jù)更改源而產(chǎn)生的bug問題邻寿,可能就不是那么好找了。如何選擇视哑,關(guān)鍵在于業(yè)務(wù)邏輯處理時(shí)的需求變化绣否。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挡毅,隨后出現(xiàn)的幾起案子蒜撮,更是在濱河造成了極大的恐慌,老刑警劉巖跪呈,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淀弹,死亡現(xiàn)場離奇詭異,居然都是意外死亡庆械,警方通過查閱死者的電腦和手機(jī)薇溃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缭乘,“玉大人沐序,你說我怎么就攤上這事《榧ǎ” “怎么了策幼?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奴紧。 經(jīng)常有香客問我特姐,道長,這世上最難降的妖魔是什么黍氮? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任唐含,我火速辦了婚禮,結(jié)果婚禮上沫浆,老公的妹妹穿的比我還像新娘捷枯。我一直安慰自己,他們只是感情好专执,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布淮捆。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攀痊。 梳的紋絲不亂的頭發(fā)上桐腌,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音苟径,去河邊找鬼哩掺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涩笤,可吹牛的內(nèi)容都是我干的嚼吞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蹬碧,長吁一口氣:“原來是場噩夢啊……” “哼舱禽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恩沽,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤誊稚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后罗心,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體里伯,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年渤闷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疾瓮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡飒箭,死狀恐怖狼电,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弦蹂,我是刑警寧澤肩碟,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站凸椿,受9級(jí)特大地震影響削祈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脑漫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一髓抑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窿撬,春花似錦启昧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跛璧,卻和暖如春严里,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背追城。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工刹碾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人座柱。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓迷帜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親色洞。 傳聞我的和親對象是個(gè)殘疾皇子戏锹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容