Swift基礎 屬性

2021-08-29 21:01:58 字數 2746 閱讀 3547

2,計算屬性

3,屬性觀察器

4,全域性變數和區域性變數

5,靜態屬性

屬性將值於特定的類,結構或列舉關聯。

儲存屬性:儲存常量或變數作為例項的一部分;只可用於類和結構體

計算屬性:計算乙個值(而不是儲存)。計算屬性可以用於類,結構體和列舉中。

屬性觀察器: 用來監控屬性值得變化,以此來觸發乙個自定義的操作。 屬性觀察期可以新增到自己寫的儲存屬性上,也可以新增到從父類繼承的屬性上。

簡單來說,乙個儲存屬性就是儲存在特定類或結構體的例項裡乙個常量或變數。

可以在定義儲存屬性時指定預設值,甚至修改變數儲存屬性的值 如:

class player 

let kobe = player()

print("kebe的球衣號碼是:\(kobe.number),kobe的最高得分是:\(kobe.score)")

kobe.score = 60

print("kobe最後一場nba球賽得分是:\(kobe.number)")

output:

kebe的球衣號碼是:24,kobe的最高得分是:81

kobe最後一場nba球賽得分是:24

延遲儲存屬性是指當第一次被呼叫是才會計算其初始值的屬性,在屬性宣告前使用lazy來表示乙個延遲儲存屬性,如:

class laker 

let laker = laker()

print("科比在湖人的號碼:\(laker.kobe.number)") // 使用時擦建立例項物件

out:

科比在湖人的號碼:24

除儲存屬性外,類,結構體和列舉可以定義「計算屬性」,計算屬性不直接儲存值,而是提供乙個「getter」來獲取值和乙個可選的「setter」來設定值,如:

struct point 

struct walk

struct peoplemove

set

}}var pmove = peoplemove.init(ppoint: point(), pwalk: walk.init(walk: 10, run: 20))

print("第一次移動後的座標:x:\(pmove.movepoint.x),y:\(pmove.movepoint.y)")

print("第一次移動後的人物座標:x:\(pmove.ppoint.x),y:\(pmove.ppoint.y)")

pmove.movepoint = point.init(x: 30, y: 30)

print("第二次移動後的座標:x:\(pmove.movepoint.x),y:\(pmove.movepoint.y)")

print("第二次移動後的人物座標:x:\(pmove.ppoint.x),y:\(pmove.ppoint.y)")

out:

第一次移動後的座標:x:10.0,y:20.0

第一次移動後的人物座標:x:0.0,y:0.0

第二次移動後的座標:x:30.0,y:30.0

第二次移動後的人物座標:x:20.0,y:10.0

還有一種情況,就是不能修改屬性的值,只能獲取屬性的值,我們稱之為「唯讀屬性」,如:

struct role

}let ann = role.init(wnumber: 10, tnumber: 20, hnumber: 30, bnumber: 5, multiple: 1.0)

print("總分數:\(ann.allmultiple)")

out:

總分數:65.0

屬性觀察器:監控和響應屬性值得變化,每次屬性被更改值是,都會呼叫屬性觀察器,甚至新的值和現在的值相同時也一樣會呼叫(就只乙隻觀察我們定義的屬性,就是不斷賦予同乙個值,也會一直觀察)。

可以為屬性新增如下的乙個或全部觀察器。

"willset"觀察器回京乙個新的屬性值最為固定引數傳入,在「willset」的實現**中為這個引數指定乙個名稱,如果不能指定則使用預設名稱「newvalue」

"didset"類似「willset」觀察器,會將舊的屬性值作為引數傳入,可以為該引數命名或是使用預設引數名「oldvalue」 .如:

class animation 

didset

}}var animation = animation()

animation.name = "pig"

animation.name = "dog"

out:

當前值是:pig

舊的值是:pig

當前值是:dog

舊的值是:pig

計算屬性和屬性觀察器所描述的模式也可用於全域性變數和區域性變數。

全域性變數: 在函式,方法,閉包或任何型別外定義的變數

區域性變數: 在函式,方法,閉包內部定義的變數

全域性變數和區域性變數都屬於儲存型變數,於儲存屬性類似,他提供特定型別的儲存空間,並允許讀取和寫入。另外,在全域性或區域性範圍都可以定義計算型變數,以及為儲存型變數定義觀察器。計算下變數於計算屬性一樣,返回乙個計算的值而不是儲存值,宣告格式也完全一樣。

靜態屬性:使用關鍵字static來定義值型別的型別屬性,如:

class backpack 

print("揹包的顏色:\(backpack.color)")

out:

揹包的顏色:紅色

個人**

微博:順揚sky

掘金:順揚sky

Swift靜態屬性

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

Swift屬性分類

jun 27th,2014 comments swift的屬性與objective c中的屬性是一樣的,不同的是swift細化了屬性的型別,另外除了類之外,結構體和列舉也可以有屬性。swift中有這麼幾種屬性 儲存屬性 stored properties 儲存例項的常量和變數,與類 結構體 列舉的例...

Swift型別屬性

在 c 或 objective c 中,與某個型別關聯的靜態常量和靜態變數,是作為全域性 global 靜態變數定義的。但是在 swift 中,型別屬性是作為型別定義的一部分寫在型別最外層的花括號內,因此它的作用範圍也就在型別支援的範圍內。使用關鍵字 static 來定義型別屬性。在為類定義計算型型...