swift中Class和Struct的區(qū)別

類(class)和結(jié)構(gòu)體(struct)况毅,不止在iOS開發(fā)中辛燥,在其他各種語言開發(fā)中都屬于老生常談的問題了磷瘤,在看class和struct之前敏晤,我們先看一下引用類型和值類型的概念。

引用類型:將一個對象賦值給另一個對象時慕爬,系統(tǒng)不會對此對象進行拷貝窑眯,而會將指向這個對象的指針賦值給另一個對象,當(dāng)修改其中一個對象的值時医窿,另一個對象的值會隨之改變磅甩。

值類型:將一個對象賦值給另一個對象時,會對此對象進行拷貝姥卢,復(fù)制出一份副本給另一個對象卷要,在修改其中一個對象的值時,不影響另外一個對象独榴。


在swift中僧叉,類屬于引用類型,結(jié)構(gòu)體屬于值類型棺榔,相對于其他語言來說瓶堕,swift的結(jié)構(gòu)體功能更加強大,它除了支持在結(jié)構(gòu)體聲明中基礎(chǔ)變量之外症歇,它還支持在結(jié)構(gòu)體中聲明方法郎笆,這相對于其他語言來說谭梗,是swift的一個特性之一。此外宛蚓,除了引用類型和值類型的區(qū)別之外激捏,他們還有其他的不同點,下面總結(jié)一下在swift中類和結(jié)構(gòu)體的不同點:

不同點:1.類屬于引用類型凄吏,結(jié)構(gòu)體屬于值類型

2.類允許被繼承远舅,結(jié)構(gòu)體不允許被繼承

3.類中的每一個成員變量都必須被初始化,否則編譯器會報錯痕钢,而結(jié)構(gòu)體不需要图柏,編譯器會自動幫我們生成init函數(shù),給變量賦一個默認(rèn)值


下面我們通過代碼來看一下盖喷,在swift中類(引用類型)和結(jié)構(gòu)體(值類型)具體表現(xiàn)出有何不同:

首先我們聲明一個ClassTest類爆办,其中聲明了兩個變量number和name

class?ClassTest {

? ? var?number: Int = 0

? ? var?name: String = "test"

}

聲明一個aTest难咕,輸出aTest的值课梳,之后將aTest賦值給bTest,并改變bTest的值余佃,相對應(yīng)的暮刃,aTest的值也會被改變

? ? ? ? letaTest =ClassTest()

? ? ? ? print("number is \(aTest.number)")

? ? ? ? print("name is \(aTest.name)")

? ? ? ? //以上兩行代碼會輸出number is 0和number is test


? ? ? ? letbTest = aTest

? ? ? ? bTest.number=5

? ? ? ? bTest.name="testAAA

? ? ? ? //改變了bTest中的值,由于類是引用類型爆土,相對于的aTest中的值也會被改變


? ? ? ? print("number is \(aTest.number)")

? ? ? ? print("number is \(aTest.name)")

? ? ? ? //此時aTest中的number為5椭懊,name為testAAA

如果我們將類換成結(jié)構(gòu)體,那會是什么情況呢步势?很明顯氧猬,根據(jù)值類型的特性,當(dāng)我們改變b的值時坏瘩,不會影響到a的值盅抚。

structStructTest {

? ? varnumber:Int=1

? ? varname:String="struct"

}

聲明aStruct,打印其中的值為默認(rèn)值倔矾,聲明bStruct妄均,并且將aStruct賦值給bStruct,改變b的值并不會影響a中的值哪自。

? ? ? ? letaStruct =StructTest()

? ? ? ? print(aStruct.number)

? ? ? ? print(aStruct.name)

? ? ? ? //控制臺輸出1和struct


? ? ? ? varbStruct = aStruct

? ? ? ? bStruct.number=10

? ? ? ? bStruct.name="myTestStruct"

? ? ? ? print(bStruct.number)

? ? ? ? print(bStruct.name)

? ? ? ? print(aStruct.number)

? ? ? ? print(aStruct.name)

? ? ? ? //此時輸出bStruct的值丰包,會輸出10和myTestStruct,而aStruct中的值不會被影響壤巷,仍然輸出1和struct

以上關(guān)于類和結(jié)構(gòu)體的異同就講到這里邑彪,感興趣的同學(xué)可以在深究,在swift中胧华,許多新特性相對于其他語言來說更有意思寄症,比如結(jié)構(gòu)體中也可以聲明方法升筏,這意味著我們在使用結(jié)構(gòu)體時,可以更加靈活瘸爽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末您访,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剪决,更是在濱河造成了極大的恐慌灵汪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柑潦,死亡現(xiàn)場離奇詭異享言,居然都是意外死亡,警方通過查閱死者的電腦和手機渗鬼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門览露,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人譬胎,你說我怎么就攤上這事差牛。” “怎么了堰乔?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵偏化,是天一觀的道長。 經(jīng)常有香客問我镐侯,道長侦讨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任苟翻,我火速辦了婚禮韵卤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崇猫。我一直安慰自己沈条,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布邓尤。 她就那樣靜靜地躺著拍鲤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汞扎。 梳的紋絲不亂的頭發(fā)上季稳,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音澈魄,去河邊找鬼景鼠。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铛漓。 我是一名探鬼主播溯香,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浓恶!你這毒婦竟也來了玫坛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤包晰,失蹤者是張志新(化名)和其女友劉穎湿镀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伐憾,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡勉痴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了树肃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒸矛。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胸嘴,靈堂內(nèi)的尸體忽然破棺而出雏掠,到底是詐尸還是另有隱情,我是刑警寧澤筛谚,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布磁玉,位于F島的核電站,受9級特大地震影響驾讲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜席赂,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一吮铭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颅停,春花似錦谓晌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喊熟,卻和暖如春柏肪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芥牌。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工烦味, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壁拉。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓谬俄,卻偏偏與公主長得像柏靶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溃论,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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