Swift 下标
访问一个集合的元素成员,在类中的序列和列表,结构和枚举都可以使用下标。这些下标用于存储和使用索引来检索值。数组元素可使用如:someArray[index],在 Dictionary 实例及其后续成员元素的访问也可以使用如:someDicitonary[key]。
对于单一类型,下标范围可以从单一到多个声明。我们可以用适当的下标重载传递给下标索引值的类型。下标也可以根据输入数据类型声明范围从单一维度到多维度。
下标声明语法和用法
让我们回顾一下计算属性。下标也遵循计算属性相同的语法。对于查询类型的实例下标括在方括号内,接着是实例名称。下标语法遵循结构作为 “实例方法” 和 “计算属性” 相同的语法。“subscript” 关键字用来定义标,用户可以指定一个或多个参数,它们带有返回类型。下标可以有读写或只读属性和实例存储和检索使用 “getter” 和 “setter” 属性作为计算属性。
语法
subscript(index:Int)->Int{get{// used for subscript value declarations}set(newValue){// definitions are written here}}
示例1
struct subexample {let decrementer:Int subscript(index:Int)->Int{return decrementer / index }}let division = subexample(decrementer:100) println("The number is divisible by \(division[9]) times") println("The number is divisible by \(division[2]) times") println("The number is divisible by \(division[3]) times") println("The number is divisible by \(division[5]) times") println("The number is divisible by \(division[7]) times")
当我们使用 playground 运行上面的程序,得到以下结果
The number is divisible by 11 times The number is divisible by 50 times The number is divisible by 33 times The number is divisible by 20 times The number is divisible by 14 times
示例2
class daysofaweek {privatevar days =["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","saturday"] subscript(index:Int)->String{get{return days[index]}set(newValue){self.days[index]= newValue }}}var p = daysofaweek() println(p[0]) println(p[1]) println(p[2]) println(p[3])
当我们使用 playground 运行上面的程序,得到以下结果
Sunday Monday Tuesday Wednesday
下标选项
下标采用单一到多元的输入参数,这些输入参数也属于任意数据类型。还可以使用变量,可变参数的参数。下标不能提供缺省参数值,或使用任何 in-out 参数。
定义多个标被称为“下标重载'在一个类 或结构体根据需要可以提供多个下标定义。这些多个标是基于被下标括号内声明值的类型推断。
structMatrix{let rows:Int, columns:Intvarprint:[Double] init(rows:Int, columns:Int){self.rows = rows self.columns = columns print=Array(count: rows * columns, repeatedValue:0.0)} subscript(row:Int, column:Int)->Double{get{returnprint[(row * columns)+ column]}set{print[(row * columns)+ column]= newValue }}}var mat =Matrix(rows:3, columns:3) mat[0,0]=1.0 mat[0,1]=2.0 mat[1,0]=3.0 mat[1,1]=5.0 println("\(mat[0,0])") println("\(mat[0,1])") println("\(mat[1,0])") println("\(mat[1,1])")
当我们使用 playground 运行上面的程序,得到以下结果
1.0 2.0 3.0 5.0
Swift 下标支持单参数到多参数声明相应数据类型。该程序声明的“矩阵”结构为2*2维数组矩阵来存储 “Double” 数据类型。 矩阵参数被输入整数数据类型用来声明行和列。
矩阵新实例是通过使行和列数来初始化创建的,如下所示。
var mat = Matrix(rows: 3, columns: 3)
矩阵值可通过传递行和列值到下标,通过逗号隔开,进行定义如下所示。
mat[0,0] = 1.0 mat[0,1] = 2.0 mat[1,0] = 3.0 mat[1,1] = 5.0