swift中關於屬性的一些基本知識點

2021-09-09 06:50:12 字數 1775 閱讀 9085

mark,防忘

計算屬性可以由類、結構體和列舉定義。儲存屬性只能由類和結構體定義。

由於結構體是值型別。當乙個值型別的例項被標記為常量時,該例項的其他屬性也均為常量。

因此,如果你建立了乙個結構體的例項並且把這個例項賦給常量,你不能修改這個例項的屬性,即使是宣告為變數的屬性。

對於類來說則不同,它是引用型別。如果你給乙個常量賦值引用型別例項,你仍然可以修改那個例項的變數屬性。

延遲儲存屬性(實現懶載入)的值在其第一次使用時才進行計算。你可以在其宣告前標註 lazy 來表示乙個延遲儲存屬性。

必須把延遲儲存屬性宣告為變數(使用 var 關鍵字),因為它的初始值可能在例項初始化完成之前無法取得。

計算屬性實際並不儲存值。相反,它提供乙個讀取器(get)和乙個可選的設定器(set)來間接得到和設定其他的屬性和值。

示例:

struct rect 

set(newcenter)

}}

注1:如果乙個計算屬性的設定器(setter)沒有為將被設定的值定義乙個名字,那麼他將被預設命名為 newvalue。下面是結構體 rect 的另一種寫法,其中利用了簡寫設定器宣告的特性。

struct rect 

set

}}

注2:必須用 var 關鍵字定義計算屬性——包括唯讀計算屬性——為變數屬性,因為它們的值不是固定的。 let 關鍵字只用於常量屬性,用於明確那些值一旦作為例項初始化就不能更改。

乙個有讀取器但是沒有設定器的計算屬性就是唯讀計算屬性。唯讀計算屬性也可以通過點語法訪問,但是不能對它進行修改和賦值

示例:

struct rect 

}

你可以為你定義的任意儲存屬性新增屬性觀察者,除了延遲儲存屬性

你可以選擇將這些觀察者或其中之一定義在屬性上:你可以選擇將這些觀察者或其中之一定義在屬性上:

如果你實現了乙個 willset 觀察者,新的屬性值會以常量形式引數傳遞。你可以在你的 willset 實現中為這個引數定義名字。如果你沒有為它命名,那麼它會使用預設的名字 newvalue

同樣,如果你實現了乙個 didset觀察者,乙個包含舊屬性值的常量形式引數將會被傳遞。你可以為它命名,也可以使用預設的形式引數名 oldvalue

示例:

class stepcounter 

didset }}

}

對於 類 型別 的計算屬性,你可以使用 class 關鍵字來允許子類重寫父類的實現。

示例:

struct somestructure 

}class someclass

class var overrideablecomputedtypeproperty: int

}

總結例項屬性和型別屬性的不同:

必須給型別屬性的儲存屬性乙個初始值,而例項屬性則不一定。

型別屬性進行訪問直接輸入型別名稱,而例項屬性輸入例項名稱。

Swift自學之旅一 Swift的一些基本知識

1 變數與常量 定義變數使用關鍵字 var 定義常量使用關鍵字 let 定義時,資料型別可以顯示也可以隱式 對了,等於號後面有空格 比如 var myvariable 100 var myvariable int 100 2 佔位符?格式為 變數或者常量名 比如 var name james pri...

C 中關於Gridview的一些屬性(一)

以下屬性是在程式編寫過程中遇到的,不懂的上網整理了一下,如有問題,歡迎批評指正 datakeynames 一行中繫結的鍵值 gridlines gridlines 是網格,none 就是不顯示網格,gridlines.none 不顯示網格線。gridlines.horizontal 僅顯示水平網格線...

關於shape的一些屬性

solid 實心,就是填充的意思 android color指定填充的顏色 gradient 漸變 android startcolor和android endcolor分別為起始和結束顏色,ndroid angle是漸變角度,必須為45的整數倍。另外漸變預設的模式為android type lin...