Swift2.0语言教程之下标脚本
下标脚本
下标脚本是訪问对象、集合或者序列的高速方式。开发人员不须要调用实例特定的赋值和訪问方法,就能够直接訪问所须要的数值。
比如在数组中,能够直接使用下标去訪问或者改动数组中的某一个元素。
代码例如以下:
- import Foundation
- var array=["One","Two","Three","Four","Five"]
- print("訪问元素:\(array[2])")
- array[2]="Third"
- print("訪问改动后的元素:\(array[2])")
执行结果例如以下:
- 訪问元素:Three
- 訪问改动后的元素:Third
在Swift中,下标脚本也能够定义在类中。这样。开发人员就能够像数组一样。高速訪问类中的属性。本节将主要解说类中怎样使用下标脚本。
定义下标脚本
下标脚本通过subscriptkeyword进行定义。其定义形式例如以下:
- subscript(參数名称1:数据类型,參数名称2:数据类型,…) ->返回值的数据类型 {
- get {
- // 返回与參数类型匹配的类型的值
- }
- set(參数名称) {
- // 运行赋值操作
- }
- }
注意:set參数名称必须和下标脚本定义的返回值类型同样,所以不为它指定数据类型。
与计算属性同样,set后面假设没有声明參数,那么就使用默认的newValue。
【演示样例8-18】下面将在类中定义一个下标脚本。实现通过下标脚本获取某一属性的值。代码例如以下:
- class NewClass{
- var english:Int=0
- var chinese:Int=0
- var math:Int=0
- //定义下标脚本
- subscript(index:Int)->Int{
- get{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- set{
- english=newValue
- chinese=newValue
- math=newValue
- }
- }
- }
调用下标脚本
定义下标脚本后。就能够进行调用了。其调用形式例如以下:
- 实例对象[參数1,參数2,…]
当中,[]和它里面的内容就代表了在类中定义的下标脚本。
使用下标脚本
下标脚本能够依据传入參数的不同,分为具有一个入參參数的下标脚本和具有多个入參參数的下标脚本。下面就是对这两个下标脚本在类中的使用。
1.具有一个传入參数的下标脚本
具有一个入參參数的下标脚本是最常见的。
在集合以及字符串中使用的下标就是具有一个传入參数的下标脚本。
【演示样例8-19】下面程序通过使用下标脚本计算3门成绩的和。
代码例如以下:
- import Foundation
- class Score{
- var english:Int=0
- var chinese:Int=0
- var math:Int=0
- //定义下标脚本
- subscript(index:Int)->Int{
- get{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- set{
- english=newValue
- chinese=newValue
- math=newValue
- }
- }
- }
- var myscore=Score()
- var sum:Int=0
- var i:Int=0
- //遍历
- for i=0;i<3;++i{
- sum+=myscore[i]
- }
- print(sum)
- //改动属性值
- myscore[0]=100
- myscore[1]=90
- myscore[2]=80
- //遍历求和
- for i=0;i<3;++i{
- sum+=myscore[i]
- }
- print(sum)
执行结果例如以下所看到的:
- 0
- 240
注意:下标脚本能够和计算属性一样设置为读写或仅仅读。以上的代码是读写的形式。
仅仅读的一般语法形式例如以下:
- subscript(參数名称:数据类型) -> Int {
- get{
- //返回与參数匹配的Int类型的值
- }
- }
- 能够简写为下面的形式:
- subscript(參数名称:数据类型) -> Int {
- // 返回与參数匹配的Int类型的值
- }
【演示样例8-20】下面就使用仅仅读的形式实现使用下标訪问属性值的功能。
代码例如以下:
- import Foundation
- class Score{
- var english:Int=50
- var chinese:Int=100
- var math:Int=30
- //定义下标脚本
- subscript(index:Int)->Int{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- }
- var myscore=Score()
- var sum:Int=0
- var i:Int=0
- //遍历输出属性值
- for i=0;i<3;++i{
- print(myscore[i])
- }
执行结果例如以下所看到的:
- 50
- 100
- 30
2.具有多个參数的下标脚本
具有一个入參參数的下标脚本一般使用在多维维数组中。
下面就是使用具有两个參数的下标为二维数组赋值。代码例如以下:
- import Foundation
- var value:Int=0
- class NewClass{
- var rows: Int = 0, columns: Int=0
- var grid: [Double]
- //初始化方法
- init(rows: Int, columns: Int) {
- self.rows = rows
- self.columns = columns
- grid = Array(count: rows * columns, repeatedValue: 0.0)
- }
- func indexIsValidForRow(row: Int, column: Int) -> Bool {
- return row >= 0 && row < rows && column >= 0 && column < columns
- }
- //下标脚本
- subscript(row: Int, column: Int) -> Double {
- get {
- assert(indexIsValidForRow(row, column: column), "Index out of range")
- return grid[(row * columns) + column]
- }
- set {
- assert(indexIsValidForRow(row, column: column), "Index out of range")
- grid[(row * columns) + column] = newValue
- }
- }
- }
- var matrix = NewClass(rows: 2, columns: 2)
- print("没有赋值前")
- print(matrix[0,0])
- print(matrix[0,1])
- print(matrix[1,0])
- print(matrix[1,1])
- print("赋值后")
- matrix[0,0]=1.0
- matrix[0,1]=5.6
- matrix[1,0]=2.4
- matrix[1,1]=3.2
- print(matrix[0,0])
- print(matrix[0,1])
- print(matrix[1,0])
- print(matrix[1,1])
执行结果例如以下所看到的:
- 没有赋值前
- 0.0
- 0.0
- 0.0
- 0.0
赋值后
- 1.0
- 5.6
- 2.4
- 3.2
当然,下标脚本除了能够对訪问对象以及对象中的属性外,还能够实现一些自己定义的功能。例如以下面的代码。此代码实现的功能是计算下标值和10的乘积。代码例如以下:
- import Foundation
- class NewClass{
- var count1: Int=10
- //定义下标脚本
- subscript(index:Int) -> Int {
- get {
- var count=index*count1
- return count
- }
- set(newvalue){
- //运行赋值操作
- count1=newvalue
- }
- }
- }
- let newClass=NewClass()
- print(newClass.count1)
- print(newClass[6])
执行结果例如以下:
- 10
- 60
本文选自:Swift2.0语言高速入门v3.0 大学霸内部资料,转载请注明出处,尊重技术尊重IT人!