SwiftUI學習-2 Struct和Class

Struct & Class

兩者的區(qū)別


  • 1.Struct是數(shù)值類型,Class是引用類型

數(shù)值類型在傳遞過程中會被copy。當然,被拷貝的只是結(jié)構(gòu),而不是每一個片段,直到我們想要進行write操作,這時候才會真的做一個按位拷貝。

舉例:每一天大家都在變老,時間把“這一天”的你交給“下一天“的時候,你已經(jīng)不再是那個你了,而是變老了一天的你。
“今天的你”夜深人靜中思考,為什么這道題現(xiàn)在感覺很容易,而昨天死活做不出來,白白丟了一道大題的15分,并試圖通過平行時空告訴“昨天的你”其實會這道題時...
很遺憾的是,這倆人已經(jīng)不是同一個時空的你了,即使修改了”今天的你“canDo屬性為true,但是"昨天的你"canDo屬性仍然是false。

引用類型則存于堆內(nèi)存中,是通過指針傳遞,內(nèi)存地址相同。簡單來說就是“還是那一個”。

舉例:在不支持不鼓勵不贊同不反對中,幾個人分享了同一個視頻會員賬號,賬號被其中一個人修改了賬號名稱,但是賬號還是那一個,所以每個人都看到賬號名稱變了。


  • 2.Struct是為了函數(shù)式編程(functional programming)而構(gòu)建的,而Class是為了面向?qū)ο笮问骄幊?/strong>(Object-oriented programming)而構(gòu)建。

函數(shù)式編程專注于事物的功能特性。大多數(shù)我們看到的都是Struct,比如說:Array、Dictionary、Int、Bool、Double等。
面向?qū)ο缶幊讨攸c是封裝數(shù)據(jù),并將功能放到某個容器中,一個Object對象。
復制一個東西,還是使用一個指針,導致的行為是大為不同的。


  • 3.Struct不可繼承,Class可以單繼承

  • 4.Struct提供的init方法可初始化所有變量,而Class沒有提供變量初始化方法,需自行實現(xiàn)。

  • 5.Struct需明確表達可變或不可變,Class則一直可變

Struct利用var表達可變,或者let表達不可變。
Class中不能控制可變性,只要有它的指針就可以改變它。


  • 6.Struct用于各種數(shù)據(jù)結(jié)構(gòu),而Class用于特殊環(huán)境。

Swift中大多數(shù)我們能看到的都是Struct,除了View是一種協(xié)議(Protocol)。
MVVM結(jié)構(gòu)中,ViewModel永遠會選擇用Class來實現(xiàn),因為它需要被分享使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容