本文共 1763 字,大约阅读时间需要 5 分钟。
我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额)、interestRate(利率)和owner(账户名)。
在这3个属性中,amount和owner会因人而异,不同的账户这些内容是不同的,而所有账户的interestRate都是相同的。
amount和owner属性与账户个体有关,称为实例属性。interestRate属性与个体无关,或者说是所有账户个体共享的,这种属性称为静态属性或类型属性。
面向对象类型(结构体、枚举和类)都可以定义静态属性,它们的语法格式分别如下所示:
1 | <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 枚举名 { //定义枚举,枚举中不可以定义实例存储属性,但可以定义静态存储属性,也可以定义静态计算属性
1 | <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结构体静态属性示例:
1 | <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> |
)
本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746605,如需转载请自行联系原作者