1.簡介數組
下標腳本能夠定義在類,結構體,枚舉這些目標中函數
能夠經過索引快捷地獲取值spa
var a: Array<Int> = [1,2,3,4,5]orm
print(a[0])索引
a[3] = 23ip
print(a[3])get
var dic: Dictionary<Int,String> = [1:"tom",2:"kite",3:"rose"]it
print(dic[2])io
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)