Swift中屬性(Property)的分類

2021-10-25 04:31:50 字數 2632 閱讀 1188

在swift的學習過程中,我發現理解屬性,對後續學習類(class)、列舉(enumeration)和協議(protocol)很有幫助,現在總結一下swift中屬性的分類,主要分為四大類:

儲存例項屬性(stored instance property):儲存在例項的記憶體中的屬性,只有乙份

計算例項屬性(computed instance property):不占用系統記憶體,呼叫的時候才計算得出的例項屬性,類似例項的方法

儲存型別屬性(stored type property):整個程式執行過程中就只有乙份記憶體,類似全域性變數或常量

計算型別屬性(computed type property):不占用系統記憶體,呼叫的時候才計算得出的屬性,類似全域性函式

下面分別詳細的總結一下:

enum

animal

class

wronganimal

// class 'wronganimal' has no initializers

// 所有儲存例項屬性必須初始化:

class

animal

}var animal =

animal

(eyes:

2)

extension

animal

struct

point}}

let point =

point

(x:3

, y:4)

point.distancetoorigin // 5

struct

point

}

extension

point

}

protocol

game

var lose:

int}

extension

game

}struct

footballgame

:game

let footballgame =

footballgame

(win:

8, lose:2)

footballgame.winrate // 0.8

enum

color

:int

color

.blue.rawvalue // 2

color

.yellow.rawvalue =

4// cannot assign to property: 'rawvalue' is immutable

enum

color

:int}}

color

.blue.rawvalue // 20

struct

storage

store

.books // 10

store

.money =

30

class

storage

class

largestorage

:storage

extension

uicolor

uicolor

.mycolor

class

storage

}

class

largestorage

:storage

}

swift中的屬性主要可以分為四大類:儲存例項屬性,計算例項屬性,儲存型別屬性,計算型別屬性。

進一步總結,如果按記憶體儲存方式分類,可以分為兩大類:儲存屬性(儲存在系統記憶體中變數或者常量)和計算屬性(不占用記憶體,類似函式),如果按屬性是屬於例項還是類,可以分為:例項屬性(屬於例項的屬性)和型別屬性(屬於類的屬性,用static或者class修飾)。

理解的屬性的分類,我們可以大概推出某類屬性的適用場景和規則,比如儲存例項屬性,因為要儲存在例項的記憶體中,所以例項初始化的時候必須初始化全部的儲存屬性(optional型別除外),這也解釋了為什麼extension中為什麼不能新增儲存例項屬性,因為如果這樣做了,那麼這個屬性就必須存在於例項的記憶體中,那之前所有已經初始化的例項就必須全部修改,幾乎不可能實現,所以extension中只能新增計算屬性或者儲存型別屬性。

理解分類後,以後看到乙個屬性,大概知道這是什麼型別的屬性,從而理解這個屬性設計者的意圖,加快理解**。

其實屬性還有很多內容,比如屬性觀察器(property observers),對應關鍵字willsetdidset,還有延遲屬性(lazy properties),理解屬性分類後再去學習這些內容會容易很多。

JS中Attribute和property的區別

在使用angular中的資料繫結時,發現對html屬性和dom屬性不是很清楚,順便屢屢清楚這二者的區別。attribute html屬性,書寫在標籤內的屬性,使用setattribute 和getattribute 進行設定和獲取。property dom屬性,html標籤對應的dom節點屬性,使用...

Swift中延遲屬性 lazy

延遲儲存屬性是指當第一次被呼叫的時候才會計算其初始值的屬性。在屬性宣告前使用 lazy來標示乙個延遲儲存屬性。注意 必須將延遲儲存屬性宣告成變數 使用var關鍵字 因為屬性的值在例項構造完成之前可能無法得到。而常量屬性在構造過程完成之前必須要有初始值,因此無法宣告成延遲屬性。延遲屬性很有用,當屬性的...

Swift靜態屬性

在介紹靜態屬性之前,我們先來看乙個類的設計,有乙個account 銀行賬戶 類,假設它有3個屬性 amount 賬戶金額 interestrate 利率 和owner 賬戶名 在這3個屬性中,amount和owner會因人而異,不同的賬戶這些內容是不同的,而所有賬戶的interestrate都是相同...