11--swift之下标脚本

1.简介

下标脚本可以定义在类,结构体,枚举这些目标中

可以通过索引快捷地获取值

var a: Array<Int> = [1,2,3,4,5]

print(a[0])

a[3] = 23

print(a[3])

var dic: Dictionary<Int,String> = [1:"tom",2:"kite",3:"rose"]

print(dic[2])

2.自定义下标脚本的语法

struct SomeStruct {

var a:Int

subscript(index:Int)->Int{

get{

return index*a

}

set{

a=newValue*index

}

}

}

var s = SomeStruct(a: 5)

print(s[3])//get取值

s[5] = 6//set赋值

print(s.a)

print(s[5])//重新取值

//只读.只有get没有set

struct SomeStruct {

var a: Int

subscript(index:Int)->Int{

//        get{

//            return index*a

//        }

return index*a

}

}

var s = SomeStruct(a: 2)

print(s[2])

3.小标脚本的用法

var dic:Dictionary<Int,String> = [1:"tom",2:"kite",3:"rose"]

print(dic[1]!)

dic[2] = "jack"

print(dic[2]!)

4.下标脚本选项

下标脚本允许任意数量的入参索引,并且入参类型没有限制。返回值可以是任意类型,可以使用变量参数和可变参数,但使用写入读出(inout)参数或者给参数设置默认值都是不允许的。一个类或者结构体可以根据自身需要提供多个下标脚本实现,在定义时通过入参的类型进行区分,使用下标脚本时会自动匹配合适的下标脚本实现运行,这就是下标脚本的重载。

5.实例

用行列表操作一维数组

struct Matrix{


let rows:Int,columns:Int//定义行数列数

var grid: [Double]//定义网格,网格是一个数组

init(rows: Int,columns: Int){

self.rows = rows

self.columns = columns

self.grid = Array(count: rows*columns, repeatedValue: 5.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")//评估行列是否有效,无效则输出"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 m = Matrix(rows: 3, columns: 3)


m[2,1] = 6

print(m.grid)

m.grid[4] = 8

print(m.grid)


你可能感兴趣的:(11--swift之下标脚本)