OC:
static关键字表示静态,能够放在局部变量和全局变量前面:
- 限定作用域:对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域;
- 标明生存周期:对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同(一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放),且两次调用间变量值始终保持一致(变量只会被初始化一次);
Swift:
旧文:
static在Swift 中表示 “类型范围作用域”,这一概念有两个不同的关键字,它们分别是
static 和 class 。在非 class 的类型上下文中,我们统一使用 static 来描述类型作用域,class 关键字 是专门用在 class 类型的上下文中的,可以用来修饰类方法以及类的计算属性。类方法就是静态方法,通过类类型能直接调用。
|
Swift1.2 之后,类也可以通过static关键字拥有
类型存储属性了,static相当于 class final标识符的别名,类中的static属性拥有全局作用域和懒加载属性。但是至此文章写作完成时,还不能通过关键字class来定义
类型存储属性,仅能通过class定义类型计算属性。可见后续关于类型属性以后会更加完善。
“static” methods and properties are now allowed in classes (as an alias for class final). You are now allowed to declare static stored properties in classes,which have global storage and are lazily initialized on first access (like global variables).
|
- 可以使用static来定义类型属性
struct
Point {
let x: Double let y: Double // 存储属性 static let zero = Point(x: 0 ,y: 0 ) // 计算属性 static var ones: [Point] { return [Point(x: 1 ,y: 1 ), Point(x: - 1 , Point(x: 1 ,y: - 1 ),y: - 1 )] } // 类型方法 static func add(p1: Point,p2: Point) -> Point { return Point(x: p1. x + p2. x ,y: p1. y + p2. y ) }
}
class
SomeClass {
static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 27 } class var overrideableComputedTypeProperty: Int { return 107 } static var storedClassProp = "class property not OK"
}
|
注:由于Swift还处于完善中,所以本文中关于Swift的一些描述可能在未来的失效,请注意甄别。如内容有误,欢迎指出。