我先來設計一個類:有一個Account(銀行賬戶)類,假設它有3個屬性:amount(賬戶金額)、interestRate(利率)和owner(賬戶名)。
在這3個屬性中,amount和owner會因人而異,不同的賬戶這些內容是不同的,而所有賬戶的interestRate都是相同的。
amount和owner屬性與賬戶個體有關,稱為實例屬性。interestRate屬性與個體無關,或者說是所有賬戶個體共享的,這種屬性稱為靜態屬性或類型屬性。
面向對象類型(結構體、枚舉和類)都可以定義靜態屬性,它們的語法格式分別如下所示:
<span style="font-size:14px;">struct 結構體名 { //定義結構體, 結構體中可以定義靜態存儲屬性和靜態計算屬性<br> static var(或let) 存儲屬性 = "xxx" <br> ...<br> static var 計算屬性名: 屬性數據類型 { <br> get { <br> return 計算後屬性值 <br> }<br> set (新屬性值) { <br> ...<br> }<br> }<br>}<br></span>
enum 枚舉名 { //定義枚舉,枚舉中不可以定義實例存儲屬性,但可以定義靜態存儲屬性,也可以定義靜態計算屬性
<span style="font-size:14px;">static var(或let)存儲屬性 = "xxx" <br> ...<br> static var 計算屬性名: 屬性數據類型 { <br> get { <br> return 計算後屬性值 <br> } <br> set (新屬性值) {<br> ...<br> } <br> }<br>}<br> <br>class 類名 { //定義類,類中不僅可以定義實例存儲屬性,還可以定義靜態存儲屬性<br> staticvar(或let) 存儲屬性 = "xxx" <br> ...<br> class(或static) var 計算屬性名: 屬性數據類型 {<br> get {<br> return 計算後屬性值<br> } <br> set (新屬性值) { <br> ...<br> } <br> }<br>} <br>結構體靜態計算屬性也可以是只讀的,語法如下:<br>static var 計算屬性名: 屬性數據類型 {<br> return 計算後屬性值<br>}<br></span>
看一個Account結構體靜態屬性示例:
<span style="font-size:14px;">struct Account {//定義Account結構體<br> <br> var amount: Double = 0.0 //賬戶金額<br> var owner: String = "" //賬戶名<br> <br> static var interestRate: Double = 0.0668 //定義靜態存儲屬性interestRate利率<br> <br> static var staticProp: Double { //定義靜態計算屬性staticProp<br> return interestRate * 1_000_000<br> }<br> <br> var instanceProp: Double { //定義實例計算屬性instanceProp<br> return Account.interestRate * amount<br> }<br>}<br> <br>//訪問靜態屬性<br>print(Account.staticProp) <br> <br>var myAccount = Account()<br>//訪問實例屬性<br>myAccount.amount =1_000_000<br>//訪問靜態屬性<br>print(myAccount.instanceProp<br></span>
)