OC和Swift中的static
2016-01-21 21:17
302 查看
OC:static关键字表示静态,能够放在局部变量和全局变量前面:
限定作用域:对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域;
标明生存周期:对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同(一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放),且两次调用间变量值始终保持一致(变量只会被初始化一次);
Swift:static在Swift 中表示 “类型范围作用域”,可以使用它来定义类型属性,最初的时候,Swift不支持class类型的类型存储属性,static关键字只能用于非class类型中:
旧文:static在Swift 中表示 “类型范围作用域”,这一概念有两个不同的关键字,它们分别是 static和 class。在非 class 的类型上下文中,我们统一使用 static 来描述类型作用域, class关键字 是专门用在 class 类型的上下文中的,可以用来修饰类方法以及类的计算属性。类方法就是静态方法,通过类类型能直接调用。 class中现在是不能出现类的(静态)存储属性的,我们如果写类似这样的代码的话: class MyClass { class var bar: Bar? } [/code] 编译时会得到一个错误: class variables not yet supported 这主要是因为在 Objective-C 中就没有类变量这个概念,为了运行时的统一和兼容,暂时不太方便添加这个特性。Apple 表示今后将会考虑在某个升级版本中实装 class 类型的类存储变量,现在的话,我们只能在 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). |
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, y:1), Point(x: 1, y: -1), Point(x: -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 Control Flow控制流
- swift论坛正式上线
- swift2.0 UIImagePickerController 拍照 相册 录像
- 自学 iOS – 三十天三十个 Swift 项目
- Swift学习笔记:类和结构
- Swift-11-协议(Protocols)
- OC Block、Swift Closure以及C# Lambda的对比
- Swift学习之协议
- Swift学习之路05-类和结构体
- Xcode7.2 No such module 'Cocoa'问题
- swift附属脚本
- swift方法学习
- swift函数学习
- swift流程控制
- swift数组与字典
- Xcode7.2 Cannot refactor swift code
- swift字符与字符串学习
- swift 枚举
- ThPullRefresh (Swift 版)下拉上拉刷新
- swift基础语法