在介紹靜態屬性之前,我們先來看乙個類的設計,有乙個account(銀行賬戶)類,假設 它有3個屬性:amount(賬戶金額)、interestrate(利率)和owner(賬戶名)。在這3個屬性中,amount和owner會因人而 異,不同的賬戶這些內容是不同的,而所有賬戶的interestrate都是相同的。
amount和owner屬性與賬戶個體有關,稱為例項屬性。interestrate屬性與個體無關,或者說是所有賬戶個體共享的,這種屬性稱為靜態屬性或型別屬性。
3種物件導向型別(結構體、列舉和類)都可以定義靜態屬性,它們的語法格式分別如下所示:
[html]view plain
copy
struct 結構體名
set (新屬性值)
} }
enum 列舉名
set (新屬性值)
} }
class 類名
set (新屬性值)
} }
上 述**中,第①行是定義結構體,結構體中可以定義靜態儲存屬性和計算屬性。第②**是定義靜態儲存屬性,宣告關鍵字是static,這個屬性可以是變數屬 性,也可以是常量屬性。第③行**是定義靜態計算屬性,宣告使用的關鍵字是static,計算屬性不能為常量,這裡只能是變數。結構體靜態計算屬性也可以 是唯讀的,語法如下:
static var 計算屬性名 : 屬性資料型別
第④行是定義列舉,列舉中不可以定義例項儲存屬性,但可以定義靜態儲存屬性,也可以定義靜態計算屬性。定義列舉靜態屬性與定義結構體靜態屬性的語法完全一樣,這裡就不再贅述了。
第⑦行是定義類,類中可以定義例項儲存屬性,但不可以定義靜態儲存屬性。類中可以定義靜態計算屬性。宣告使用的關鍵字是class,這與結構體和列舉的宣告不同。
我們對上述說明進行了歸納,見下表。
提示 在靜態計算屬性中不能訪問例項屬性(包括儲存屬性和計算屬性),但可以訪問其他靜態屬性。在例項計算屬性中能訪問例項屬性,也能訪問靜態屬性。
一、結構體靜態屬性
下面我們先看乙個account結構體靜態屬性示例:
[html]view plain
copy
struct account
var instanceprop : double
} //訪問靜態屬性
println(account.staticprop) ④
var myaccount = account()
//訪問例項屬性
myaccount.amount = 1_000_000 ⑤
//訪問靜態屬性
println(myaccount.instanceprop) ⑥
上 述**定義了account結構體,其中第①行**定義了靜態儲存屬性interestrate,第②行**定義了靜態計算屬性staticprop,在 其屬性體中可以訪問interestrate等靜態屬性。第③行**定義了例項計算屬性instanceprop,在其屬性體中能訪問靜態屬性 interestrate,訪問方式為「型別名.靜態屬性」,如account.interestrate。第④行**也是訪問靜態屬性,訪問方式也是 「型別名.靜態屬性」。
第⑤行和第⑥行**是訪問例項屬性,訪問方式是「例項.例項屬性」。
二.列舉靜態屬性
下面我們先看乙個account列舉靜態屬性示例:
[html]view plain
copy
enum account
var instanceprop : double ⑦
return account.interestrate * 1_000_000 ⑧
} }
//訪問靜態屬性
println(account.staticprop) ⑨
var myaccount = account.中國工商銀行
//訪問例項屬性
println(myaccount.instanceprop) ⑩
上 述**定義了account列舉型別,其中第①~②行**定義了列舉的4個成員。第③行**定義了靜態儲存屬性interestrate,第④行**定義 了靜態計算屬性staticprop,在其屬性體中可以訪問interestrate等靜態屬性。第⑤行**定義了例項計算屬性 instanceprop,其中第⑥~⑦行**使用switch語句判斷當前例項的值,獲得不同的利息,第⑥行**中使用了self,它指代當前例項本 身。第⑧行**是返回計算的結果。
第⑨行**是訪問靜態屬性。第⑩行**是訪問例項屬性。
示例執行結果如下:
668000.0
669000.0
三、類靜態屬性
下面我們先看乙個account類靜態屬性示例:
[html]view plain
copy
class account
var instanceprop : double
} //訪問靜態屬性
println(account.staticprop) ⑥
var myaccount = account()
//訪問例項屬性
myaccount.amount = 1_000_000
//訪問靜態屬性
println(myaccount.instanceprop) ⑦
上 述**第①行定義了account類,第②行**定義了儲存屬性interestrate,注意在類中不能定義靜態儲存屬性。第③行**定義了靜態計算屬 性staticprop,關鍵字是class。第④行**定義了例項計算屬性instanceprop,在第⑤行**訪問例項屬性 interestrate和amount,訪問當前物件的例項屬性可以在屬性前加「self.」,self指代當前例項本身。第⑥行**也是訪問靜態屬 性。第⑦行**是訪問例項屬性。
Swift靜態屬性
在介紹靜態屬性之前,我們先來看乙個類的設計,有乙個account 銀行賬戶 類,假設它有3個屬性 amount 賬戶金額 interestrate 利率 和owner 賬戶名 在這3個屬性中,amount和owner會因人而異,不同的賬戶這些內容是不同的,而所有賬戶的interestrate都是相同...
Swift 靜態屬性 及其用法(全域性常量)
首先要說的是 swift 中 使用三種方法來實現靜態屬性 1.結構體靜態屬性 2.列舉靜態屬性 3.類靜態屬性 這三種方法的定義如下所示 第一種 結構體方式 struct 結構體名 set 新屬性值 第二種 列舉方式 enum 列舉名 set 新屬性值 第三種 類方式 class 類名 set 新屬...
Swift屬性分類
jun 27th,2014 comments swift的屬性與objective c中的屬性是一樣的,不同的是swift細化了屬性的型別,另外除了類之外,結構體和列舉也可以有屬性。swift中有這麼幾種屬性 儲存屬性 stored properties 儲存例項的常量和變數,與類 結構體 列舉的例...