類和結(jié)構(gòu)體是通用的,靈活的構(gòu)造,成為程序代碼的基礎(chǔ)枉层。您可以通過使用與常量,變量和函數(shù)完全相同的語法來定義屬性和方法來向類和結(jié)構(gòu)添加功能赐写。
與其他編程語言不同鸟蜡,Swift不需要為自定義類和結(jié)構(gòu)創(chuàng)建單獨(dú)的接口和實(shí)現(xiàn)文件。在Swift中挺邀,您可以在單個(gè)文件中定義一個(gè)類或結(jié)構(gòu)揉忘,并且該類或結(jié)構(gòu)的外部接口將自動(dòng)使其他代碼可用
1,基本語法
1.結(jié)構(gòu)類型的成員初始化器
所有結(jié)構(gòu)都有一個(gè)自動(dòng)生成的成員初始化器,您可以使用它來初始化新結(jié)構(gòu)實(shí)例的成員屬性端铛∑可以通過名稱將新實(shí)例的屬性的初始值傳遞給成員初始化器,與結(jié)構(gòu)不同,類實(shí)例不接收默認(rèn)成員初始化器
2.結(jié)構(gòu)和枚舉是價(jià)值類型Value Types
您實(shí)際上一直在使用價(jià)值類型禾蚕。事實(shí)上您朽,Swift整數(shù),浮點(diǎn)數(shù)换淆,布爾值哗总,字符串,數(shù)組和字典中的所有基本類型都是值類型倍试,并被實(shí)現(xiàn)為后臺(tái)結(jié)構(gòu)讯屈。
所有結(jié)構(gòu)和枚舉都是Swift中的值類型。這意味著您創(chuàng)建的任何結(jié)構(gòu)和枚舉實(shí)例以及它們作為屬性的任何值類型在代碼中傳遞時(shí)總是被復(fù)制
3.類是引用類型Reference Types
與值類型不同县习,當(dāng)引用類型被分配給變量或常量或?qū)⑵鋫鬟f給函數(shù)時(shí)涮母,不會(huì)復(fù)制引用類型。而不是復(fù)制躁愿,而是使用對相同現(xiàn)有實(shí)例的引用叛本。
引用類型,與值類型不同,賦值的過程不是拷貝,而是指針指向,存儲(chǔ)的是某個(gè)對象/實(shí)例的地址,所以當(dāng)幾個(gè)對象指向同一個(gè)實(shí)例的時(shí)候,改變其中一個(gè),其他的也會(huì)改變
注意:另外,tenEighty與alsoTenEighty,初始化為let/常量,但是還會(huì)可以改變他們的屬性,因?yàn)閷?shí)際改變的是它們指向的內(nèi)存的值的改變,而它們指向的這塊內(nèi)存的地址并沒有發(fā)生變化...
4.對象相同
有時(shí)可以找出兩個(gè)常量或變量是否與類完全相同的實(shí)例。為了實(shí)現(xiàn)這一點(diǎn)攘已,Swift提供了兩個(gè)身份運(yùn)營商:
(===)
(!==)
請注意炮赦,“與...相同”(由三等于符號(hào)表示===)并不意味著與“等于”(由兩個(gè)等號(hào)或以下代表==)相同的內(nèi)容:
=== : “相同”意味著類類型的兩個(gè)常量或變量指的是完全相同的類實(shí)例。
==:“等于”意味著兩個(gè)實(shí)例被視為“相等”或“等價(jià)”的價(jià)值样勃,對于類型設(shè)計(jì)者定義的“相等”的某些適當(dāng)含義吠勘。
5.選擇結(jié)構(gòu)體還是類
您可以使用類和結(jié)構(gòu)來定義用作程序代碼構(gòu)建塊的自定義數(shù)據(jù)類型性芬。
但是,結(jié)構(gòu)實(shí)例總是通過值傳遞剧防,并且類實(shí)例總是通過引用傳遞植锉。這意味著它們適合于不同類型的任務(wù)。當(dāng)您考慮項(xiàng)目所需的數(shù)據(jù)結(jié)構(gòu)和功能時(shí)峭拘,請決定是否將每個(gè)數(shù)據(jù)結(jié)構(gòu)定義為一個(gè)類或一個(gè)結(jié)構(gòu)
選擇結(jié)構(gòu)體的一般原則:
1.該結(jié)構(gòu)的主要目的是封裝一些相對簡單的數(shù)據(jù)值俊庇。
2.在分配或傳遞該結(jié)構(gòu)的實(shí)例時(shí),期望封裝的值將被復(fù)制而不是引用是合理的鸡挠。
3.由結(jié)構(gòu)存儲(chǔ)的任何屬性本身都是值類型辉饱,也將被預(yù)期復(fù)制而不是引用。
4.該結(jié)構(gòu)不需要從另一個(gè)現(xiàn)有類型繼承屬性或行為
6.字符串?dāng)?shù)組字典的賦值與復(fù)制 !!!!!!!與Object-C很大的不同
OC中NSString拣展,NSArray彭沼,和NSDictionary為類,而不是結(jié)構(gòu)來實(shí)現(xiàn)备埃⌒栈螅基礎(chǔ)中的字符串,數(shù)組和字典總是作為對現(xiàn)有實(shí)例的引用分配和傳遞按脚,而不是副本于毙。
swift中String,Array以及Dictionary被實(shí)現(xiàn)為結(jié)構(gòu)辅搬。這意味著當(dāng)數(shù)組(例如字符串唯沮,數(shù)組和字典)被分配給一個(gè)新的常量或變量,或者當(dāng)它們被傳遞給一個(gè)函數(shù)或者方法時(shí)被復(fù)制
arr1與arr2互不影響,,,這是設(shè)計(jì)比之前的好很多的