struct TimesTable {
let mult :Int
subscript(index:Int)->Int{
return mult * index
}
}
struct Matrix {
let rows:Int, colums:Int
var grid : [Double]
init(rows:Int,colums:Int){
self.rows=rows;
self.colums=colums;
grid=Array(count: rows * colums, repeatedValue: 0.0)
}
func indexIsValidForRow(row :Int,column:Int)->Bool{
return row >= 0 && row < rows && column >= 0 && column < colums
}
subscript(row:Int, colum:Int)->Double{
get {
assert(indexIsValidForRow(row, column: colum), "Index out of range")
return grid[(row * colums)+colum]
}
set{
assert(indexIsValidForRow(row, column: colum), "Index out of range")
grid[(row * colums)+colum]=newValue
}
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//下标脚本
//下标脚本可以定义在类、结构体和枚举这些目标中,可以认为是访问集合列表或序列的快捷方式,使用下脚标的索引设置和获取值,不需要再调用实例的特定的赋值和访问方法。比如访问字典实例中的元素可以是someDic[key]
//与定义实例方法类似,定义下标脚本使用subscript关键字,显示声明入参(一个或多个)和返回类型,与实例方法不同的是下标脚本可以设定为读写或只读。
let threetimesTable=TimesTable(mult: 3);
print("3的6倍是\(threetimesTable [6])")//3的6倍是18
//下标脚本用法
//根据使用场景的不同下标脚本也具有不同的含义。通常下标脚本是用来访问集合、列表或序列中元素的快捷键方式。可以在自己特定的类或结构体中自由的实现下标脚本本来提供合适的功能
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
//下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。下标脚本的返回值也可以是任何类型。下标 脚本可以使用变量参数和可变参数,但使用写入读出(in-out)参数或给参数设置默认值都是不允许的。
var matrix = Matrix(rows: 2, colums: 2)
print(matrix.grid);//[0.0, 0.0, 0.0, 0.0]
matrix[0,1]=1.5
matrix[1,0]=3.5
print(matrix.grid);//[0.0, 1.5, 3.5, 0.0]
}
}