swift學習記錄(儲存屬性)

2021-07-09 02:33:49 字數 1315 閱讀 1271

屬性

屬性將值跟特定的類、結構體和列舉關聯。

swift中的屬性分為儲存屬性和計算屬性兩種。

儲存屬性:

乙個儲存屬性就是儲存在特定類或結構體的例項裡的乙個常量或變數。儲存屬性可以是變數儲存屬

性(用關鍵字

var

定義),

也可以是

常量儲存屬性

(用關鍵字

let

定義)。

class person

let boy = person()

boy.id = 1 //編譯報錯,常量屬性不能修改

boy.name = "張三" //變數屬性可以修改

常量結構體的儲存屬性

如果建立了乙個結構體的例項並將其賦值給乙個常量,則無法修改該例項的任何屬性,即使定義了變數儲存屬性:

struct person

let boy = person()

// 編譯報錯,常量結構體的屬性不能修改

boy.id = 1

boy.name = "張三"

這種行為是由於結構體(struct)屬於值型別。當值型別的例項被宣告為常量的時候,它的所有屬性也就成了常量。

屬於引用型別的類(class)則不一樣。把乙個引用型別的例項賦給乙個常量後,仍然可以修改該例項的變數屬性。

延遲儲存屬性

使用 lazy 關鍵字 宣告。延遲儲存屬性是指當第一次被呼叫的時候才會計算其初始值的屬性。

延遲儲存屬性必須是變數,因為屬性的初始值可能在例項構造完成之後才會得到。而常量屬性在構造過程完成之前必須要有初始值,因此無法宣告成延遲屬性。

當屬性的值依賴於在例項的構造過程結束後才會知道具體值的外部因素時,或者當獲得屬性的初始值需要複雜或大量計算時,可以只在需要的時候計算它。這時就

需要用到 延遲儲存屬性。

class dataimporter 

class datamanager

let manager = datamanager()

// dataimporter 例項的 importer 屬性還沒有被建立

print(manager.importer.filename) //importer 屬性只有在第一次被訪問的時候才被建立

// dataimporter 例項的 importer 屬性現在被建立了

// 輸出 "data.txt」

注意:

如果乙個被標記為lazy 的屬性在沒有初始化時就同時被多個執行緒訪問,則無法保證該屬性只會被初始化一次。

swift學習之十四 計算屬性和儲存屬性

注意點 1 willset得注意大小寫,寫錯了,不認識,而且還沒有書寫提示。2 儲存屬性只要合法,不用指明型別或者初始值,都可以加willset.3 即使是相同的值,也會呼叫 4 willset和didset只能用於儲存屬性。set和get只能用於計算屬性,但沒有只寫屬性。8,和int64一樣,8個...

swift學習記錄(計算屬性和屬性觀察者)

計算屬性不直接儲存值,而是提供乙個 getter 和乙個可選的 setter,來間接獲取和設定其他屬性或變數的值。基本語法 class struct enum 型別名 set 新屬性值 示例 class rect set newy var area int var rect rect rect.y ...

Swift學習筆記 屬性

定義乙個屬性 struct fixedlengthrange fixedlengthrange這個類裡面有兩個屬性,乙個為 firstvalue int 為可變型別,另外乙個為 length 為不可變型別 屬性賦值 var rangeofthreeitems fixedlengthrange fir...