原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:關(guān)東升的博客
我先來(lái)設(shè)計(jì)一個(gè)類(lèi):有一個(gè)Account(銀行賬戶(hù))類(lèi),假設(shè)它有3個(gè)屬性:amount(賬戶(hù)金額)、interestRate(利率)和owner(賬戶(hù)名)。
在這3個(gè)屬性中,amount和owner會(huì)因人而異,不同的賬戶(hù)這些內(nèi)容是不同的,而所有賬戶(hù)的interestRate都是相同的。
amount和owner屬性與賬戶(hù)個(gè)體有關(guān),稱(chēng)為實(shí)例屬性。interestRate屬性與個(gè)體無(wú)關(guān),或者說(shuō)是所有賬戶(hù)個(gè)體共享的,這種屬性稱(chēng)為靜態(tài)屬性或類(lèi)型屬性。
面向?qū)ο箢?lèi)型(結(jié)構(gòu)體、枚舉和類(lèi))都可以定義靜態(tài)屬性,它們的語(yǔ)法格式分別如下所示:
struct 結(jié)構(gòu)體名 {? ? //定義結(jié)構(gòu)體, 結(jié)構(gòu)體中可以定義靜態(tài)存儲(chǔ)屬性和靜態(tài)計(jì)算屬性
static var(或let) 存儲(chǔ)屬性? = "xxx"
...
static var 計(jì)算屬性名: 屬性數(shù)據(jù)類(lèi)型 {
get {
return 計(jì)算后屬性值
}
set (新屬性值) {
...
}
}
}
enum 枚舉名 {? //定義枚舉,枚舉中不可以定義實(shí)例存儲(chǔ)屬性,但可以定義靜態(tài)存儲(chǔ)屬性,也可以定義靜態(tài)計(jì)算屬性
static var(或let) 存儲(chǔ)屬性? = "xxx"
...
static var 計(jì)算屬性名: 屬性數(shù)據(jù)類(lèi)型 {
get {
return 計(jì)算后屬性值
}
set (新屬性值) {
...
}
}
}
class 類(lèi)名 {? ? //定義類(lèi),類(lèi)中不僅可以定義實(shí)例存儲(chǔ)屬性,還可以定義靜態(tài)存儲(chǔ)屬性
static var(或let) 存儲(chǔ)屬性? = "xxx"
...
class(或static)? var 計(jì)算屬性名: 屬性數(shù)據(jù)類(lèi)型 {
get {
return 計(jì)算后屬性值
}
set (新屬性值) {
...
}
}
}
結(jié)構(gòu)體靜態(tài)計(jì)算屬性也可以是只讀的,語(yǔ)法如下:
static var 計(jì)算屬性名: 屬性數(shù)據(jù)類(lèi)型 {
return 計(jì)算后屬性值
}
看一個(gè)Account結(jié)構(gòu)體靜態(tài)屬性示例:
struct Account {//定義Account結(jié)構(gòu)體
var amount: Double = 0.0? ? ? ? ? ? ? ? //賬戶(hù)金額
var owner: String = ""? ? ? ? ? ? ? ? ? //賬戶(hù)名
static var interestRate: Double = 0.0668? //定義靜態(tài)存儲(chǔ)屬性interestRate利率
static var staticProp: Double { //定義靜態(tài)計(jì)算屬性staticProp
return interestRate * 1_000_000
}
var instanceProp: Double { //定義實(shí)例計(jì)算屬性instanceProp
return Account.interestRate * amount
}
}
//訪問(wèn)靜態(tài)屬性
print(Account.staticProp)
var myAccount = Account()
//訪問(wèn)實(shí)例屬性
myAccount.amount = 1_000_000
//訪問(wèn)靜態(tài)屬性
print(myAccount.instanceProp)