你可以定義swift枚舉來存儲任意類型的關(guān)聯(lián)值,如果需要的話,每個枚舉成員的關(guān)聯(lián)值類型可以各不相同浊仆。枚舉的這種特性和其他語言中的可識別聯(lián)合,標簽聯(lián)合豫领,或者變體相似抡柿。
枚舉的原始值和關(guān)聯(lián)值是不同的。原始值是在定義枚舉時被預(yù)先填充的值等恐,像上述三個ASCII碼洲劣,對應(yīng)一個特定的枚舉值,它的原始值始終不變课蔬。關(guān)聯(lián)值是創(chuàng)建一個基于枚舉成員的常量或者變量時才設(shè)置的值囱稽,枚舉成員的關(guān)聯(lián)值可以變化。
遞歸枚舉
與Objective-C語言不同的是二跋,Swift運行直接設(shè)置結(jié)構(gòu)體屬性的子屬性战惊。上面的最后一個列子,就直接設(shè)置了someVideoMode中resolution屬性的width這個屬性扎即,以上操作并不需要重新為整個resolution屬性設(shè)置新值吞获。
所有結(jié)構(gòu)體都有一個自動生成的成員逐一構(gòu)造器况凉,用于初始化新結(jié)構(gòu)實例中成員的屬性。
//整數(shù)各拷,浮點數(shù)刁绒,布爾值,字符串烤黍,數(shù)組和字典都是值類型知市。并且在底層都是以結(jié)構(gòu)體的形式所實現(xiàn)
類是引用類型與值類型不同,引用類型在被賦予到一個變量,常量或者被傳遞到一個函數(shù)時蚊荣,其值不會被拷貝初狰。因此引用的是已存在的實例本身而不是其拷貝莫杈。
結(jié)構(gòu)體屬于值類型互例。當類型的實例被聲明為常量的時候,它的所有屬性也就成了常量筝闹。
類屬于引用類型的類則不一樣媳叨。把一個引用類型的實例賦給一個常量后,仍然可以修改該實例的變量屬性关顷。
延遲存儲屬性:延遲存儲屬性是指當?shù)谝淮伪徽{(diào)用的時候才會計算其初始值的屬性糊秆。在屬性聲明前使用lazy來標示一個延遲存儲屬性。必須將延遲存儲屬性聲明成變量(使用var關(guān)鍵字)议双,因為屬性的初始值可能在實例構(gòu)造完之后才會得到痘番。而常量屬性在構(gòu)造過程完成之前必須要有初始值,因此無法聲明成延遲屬性平痰。