Swift靜態屬性

2021-09-07 03:54:11 字數 3078 閱讀 5192

在介紹靜態屬性之前,我們先來看乙個類的設計,有乙個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 儲存例項的常量和變數,與類 結構體 列舉的例...