Swift教程之属性详解

2020-01-08 22:50:59于丽

类型属性适用于定义那些特定类型实例所通用的属性,例如一个可以被所有实例使用的常量属性(就像c中的静态常量),或者变量属性(c中的静态变量)。

可以为值类型(结构、枚举)定义存储类型属性和计算类型属性。对类而言,只能够定义计算类型属性。

值类型的存储类型属性可以是常量也可以是变量。而计算类型属性通常声明成变量属性,类似于计算实例属性

注意
不想存储实例属性,你需要给存储类型属性一个初始值。因为类型本身在初始化时不能为存储类型属性设置值

类型属性句法

在C和Objective-C中,定义静态常量、变量和全局静态变量一样。但是在swift中,类型属性的定义要放在类型定义中进行,在类型定义的大括号中,显示地声明它在类型中的作用域。

对值类型而言,定义类型属性使用static关键字,而定义类类型的类型属性使用class关键字。下面的例子展示了存储和计算类型属性的用法:

 

复制代码
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// return an Int value here
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."     static var computedTypeProperty: Int {     // return an Int value here
}
}
class SomeClass {
class var computedTypeProperty: Int {
// return an Int value here
}
}

 

注意

上面的例子是针对只读计算类型属性而言的,不过你也可以像计算实例属性一样定义可读可写的计算类型属性

查询与设置类型属性

像实例属性一样,类型属性通过点操作符来查询与设置。但是类型属性的查询与设置是针对类型而言的,并不是针对类型的实例。例如:

 

复制代码
println(SomeClass.computedTypeProperty)
// prints "42"
println(SomeStructure.storedTypeProperty)
// prints "Some value."
SomeStructure.storedTypeProperty = "Another value."
println(SomeStructure.storedTypeProperty)