你可以定義swift枚舉來存儲任意類型的關聯值,如果需要的話,每個枚舉成員的關聯值類型可以各不相同。枚舉的這種特性和其他語言中的可識別聯合,標簽聯合,或者變體相似。
枚舉的原始值和關聯值是不同的。原始值是在定義枚舉時被預先填充的值,像上述三個ASCII碼,對應一個特定的枚舉值,它的原始值始終不變。關聯值是創建一個基于枚舉成員的常量或者變量時才設置的值,枚舉成員的關聯值可以變化。
遞歸枚舉
與Objective-C語言不同的是,Swift運行直接設置結構體屬性的子屬性。上面的最后一個列子,就直接設置了someVideoMode中resolution屬性的width這個屬性,以上操作并不需要重新為整個resolution屬性設置新值。
所有結構體都有一個自動生成的成員逐一構造器,用于初始化新結構實例中成員的屬性。
//整數,浮點數,布爾值,字符串,數組和字典都是值類型。并且在底層都是以結構體的形式所實現
類是引用類型與值類型不同,引用類型在被賦予到一個變量,常量或者被傳遞到一個函數時,其值不會被拷貝。因此引用的是已存在的實例本身而不是其拷貝。
結構體屬于值類型。當類型的實例被聲明為常量的時候,它的所有屬性也就成了常量。
類屬于引用類型的類則不一樣。把一個引用類型的實例賦給一個常量后,仍然可以修改該實例的變量屬性。
延遲存儲屬性:延遲存儲屬性是指當第一次被調用的時候才會計算其初始值的屬性。在屬性聲明前使用lazy來標示一個延遲存儲屬性。必須將延遲存儲屬性聲明成變量(使用var關鍵字),因為屬性的初始值可能在實例構造完之后才會得到。而常量屬性在構造過程完成之前必須要有初始值,因此無法聲明成延遲屬性。