OC:
static关键字表示静态,能够放在局部变量和全局变量前面:
- 限定作用域:对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域;
- 标明生存周期:对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同(一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放),且两次调用间变量值始终保持一致(变量只会被初始化一次);
Swift:
旧文:
static在Swift 中表示 “类型范围作用域”,这一概念有两个不同的关键字,它们分别是
static 和 class 。在非 class 的类型上下文中,我们统一使用 static 来描述类型作用域,class 关键字 是专门用在 class 类型的上下文中的,可以用来修饰类方法以及类的计算属性。类方法就是静态方法,通过类类型能直接调用。
|
Swift1.2 之后,类也可以通过static关键字拥有
类型存储属性了,static相当于 class final标识符的别名,类中的static属性拥有全局作用域和懒加载属性。但是至此文章写作完成时,还不能通过关键字class来定义
类型存储属性,仅能通过class定义类型计算属性。可见后续关于类型属性以后会更加完善。
- 可以使用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的一些描述可能在未来的失效,请注意甄别。如内容有误,欢迎指出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。