Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值
来源:互联网 发布:回家吃饭网络订餐 编辑:程序博客网 时间:2024/06/11 18:43
前面我们基本上把Swift的基本内容过了一边, 但这并不足以让我们在开发中良好的运用, 现在让我们继续来往下学习吧:
1.全局变量和局部变量
在前面我们讲解了计算属性和属性监视器, 它们所描述的模式也是可以用于全局变量和局部变量, 所谓的全局变量和局部变量其实是和OC中里的一致, 没有多大区别,
并且全局或局部变量都属于存储型变量, 跟存储属性类似, 它提供特定类型的存储空间, 并允许读取和写入。
另外, 在全局或局部范围都可以定义计算型变量和为存储型变量定义监视器,计算型变量跟计算属性一样, 返回一个计算的值而不是存储值, 声明格式也完全一样。
PS: 全局的常量或变量都是延迟计算的, 跟延迟存储属性相似, 不同的地方在于, 全局的常量或变量不需要标记 lazy 特性; 局部范围的常量或变量不会延迟计算。
2.类型属性
在我们实际开发中, 实例的属性是属于特殊的类型属性, 同时也可以为类型本身定义属性, 不管类型有多少个实例,这些属性都只有唯一一份, 这种属性就是类型属性。
类型属性用于定义特定类型所有实例共享的数据,比如所有实例都能用的一个常量, 或者所有实例都能访问的一个变量.
对于值类型(指结构体和枚举)可以定义存储型和计算型类型属性, 对于类(class)则只能定义计算型类型属性, 值类型的存储型类型属性可以是变量或常量, 计算型类型属性跟实例的计算属性一样定义成变量属性.
PS: 跟实例的存储属性不同,必须给存储型类型属性指定默认值,因为类型本身无法在初始化过程中使用构造器给类型属性赋值。
3.类型属性语法
在 C 或 Objective-C 中, 静态常量和静态变量的定义是通过特定类型加上 global 关键字, 在 Swift 编程语言中, 类型属性是作为类型定义的一部分写在类型最外层的花括号内, 因此它的作用范围也就在类型支持的范围内.
使用关键字 static 来定义值类型的类型属性,关键字 class 来为类(class)定义类型属性, 比如:
struct SomeStructure { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 1 }}enum SomeEnumeration { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 2 }}class SomeClass { class var computedTypeProperty: Int { return 3 }}
PS: 例子中的计算型类型属性是只读的, 但也可以定义可读可写的计算型类型属性, 跟实例计算属性的语法类似.
4.获取和设置类型属性的值
在上面的例子, 我们是定义好了属性, 如果我们要取里面的属性, 是和我们在实例的时候一致的, 比如:
println(SomeClass.computedTypeProperty)// 打印出来的结果: 3println(SomeStructure.storedTypeProperty)// 打印出来的结果: Some value.SomeStructure.storedTypeProperty = "Another value."println(SomeStructure.storedTypeProperty)// 打印出来的结果: Another value.
这样子我们就可以访问类型中的属性了, 还有另外一个例子, 让我们来看看:
struct AudioChannel { static let thresholdLevel = 10 static var maxInputLevelForAllChannels = 0 var currentLevel: Int = 0 { didSet { if currentLevel > AudioChannel.thresholdLevel { // 将新电平值设置为阀值 currentLevel = AudioChannel.thresholdLevel } if currentLevel > AudioChannel.maxInputLevelForAllChannels { // 存储当前电平值作为新的最大输入电平 AudioChannel.maxInputLevelForAllChannels = currentLevel } } }}var leftChannel = AudioChannel()var rightChannel = AudioChannel()leftChannel.currentLevel = 7println(leftChannel.currentLevel)// 打印出来的结果: 7println(AudioChannel.maxInputLevelForAllChannels)// 打印出来的结果: 7rightChannel.currentLevel = 11println(rightChannel.currentLevel)// 打印出来的结果: 10println(AudioChannel.maxInputLevelForAllChannels)// 打印出来的结果: 10
PS: 由于上面做了个限制, 该电频最高就只能到达10, 所以一旦你输入大于10的数, 这里都会默认输出10.
好了, 这次我们就讲到这里, 下次我们继续~
- Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值
- Swift基础语法: 31 - Swift的初始化, 默认属性值, 初始化参数, 内部和外部参数, 可选属性类型
- Swift编程语言学习11—— 枚举全局变量、局部变量与类型属性
- Swift基础语法: 28 - Swift的实例方法, Self属性, 类型方法
- Swift语法基础:8 - Swift的常量, 变量, 标注, 命名, 输出, 注释, 分号, 整数, 浮点数, 类型安全和类型推测说明
- 第一节 Swift 简单的值类型(变量和常量)
- Swift基础语法: 22 - Swift的函数类型, 嵌套函数
- 通过反射获取匿名类型的属性和属性值
- 9.8 Swift类型属性
- Swift类型属性
- Swift 中的类型属性
- swift的别名和复数值类型
- swift 获取类的所有属性、获取对象的属性值、设置对象的属性值
- Swift基础语法: 26 - Swift的存储属性, 计算属性, 属性监视器
- 属性变量和局部变量的区别
- Swift 值类型 和 引用类型的区别
- Swift的基础,操作符,字符串和集合类型
- Swift语法基础:9 - Swift的字面量, 类型转换, 类型别名
- 无器械健身
- C++中虚析构函数的作用
- LeetCode: Fraction to Recurring Decimal
- 日拱一卒(十四)
- 飞机大战-5
- Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值
- 整理有用的Android开发资源
- Uinity学习的一些知识点
- FlappyBird后期完善
- 2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树
- 打印fibonacci数列
- 分享几个AndroidSDK镜像源
- start_kernel分析
- 推荐算法