標籤:swift儲存屬性
類是由屬性和方法組成,屬性一般是訪問資料成員,在Object-C中,屬性是為了訪問封裝後的資料成員而設計,屬性本身不儲存資料,資料是由資料成員儲存的,而Swift中的屬性分為儲存屬性和計算屬性,儲存屬性就是Object-C中的資料成員,計算屬性不儲存資料,但可以通過計算其他屬性傳回值
儲存屬性可以儲存資料,分為常量屬性和變數屬性
儲存屬性適用於類和結構體兩種物件導向結構類型,枚舉屬性沒有儲存屬性
1、儲存屬性概念
class Employee{ let no:Int = 0 var name:String = "" var job:String? var salary:Double = 0 var dept:Department? }struct Department { let no:Int = 0 var name:String = "" }
var emp = Employee()emp.no = 100 //編譯錯誤 -----(1)let Dept = Department()Dept.name = "sales" //編譯錯誤 --- (2)let emp1 = Employee()emp1.name = "sales" - ------(3)
代碼第一行修改常量屬性,程式會發生編譯錯誤,第二行代碼也會發生錯誤,因為執行個體dept本身是常量,即便它的屬性name是變數,也不能修改,第三行代碼可以編譯通過,那是因為emp1是類執行個體,是參考型別,depet是結構體執行個體,是實值型別。參考型別相當於指標,其變數也可以修改,但實值型別的變也是不可修改的
2、延遲儲存屬性
程式不關心他隸屬於哪個部門,只關心它的NO和name屬性,雖然不使用dept執行個體,但是仍然會佔用記憶體。在java中,有一種資料持久化的技術叫hibernate,hibernate有一種延時載入技術,swift也佔用了延時載入基數,樣本如下:
class Employee{ let no:Int = 0 var name:String = "" var job:String? var salary:Double = 0 lazy var dept:Department? = Department() }struct Department { let no:Int = 0 var name:String = "" }
在dept屬性前面加上lazy關鍵字,這樣dept的屬性就是消極式載入,顧名思義,就是dept屬性只有在第一次訪問它的時候才載入,如果永遠不訪問,它就不會建立,這樣就可以減少記憶體佔用
本文出自 “平凡之路” 部落格,請務必保留此出處http://linjohn.blog.51cto.com/1026193/1621819
Swift儲存屬性