訪問一個集合的元素成員,在類中的序列和列表,結(jié)構(gòu)和枚舉都可以使用下標(biāo)。這些下標(biāo)用于存儲和使用索引來檢索值。數(shù)組元素可使用如:someArray[index],在 Dictionary 實例及其后續(xù)成員元素的訪問也可以使用如:someDicitonary[key]。
對于單一類型,下標(biāo)范圍可以從單一到多個聲明。我們可以用適當(dāng)?shù)南聵?biāo)重載傳遞給下標(biāo)索引值的類型。下標(biāo)也可以根據(jù)輸入數(shù)據(jù)類型聲明范圍從單一維度到多維度。
讓我們回顧一下計算屬性。下標(biāo)也遵循計算屬性相同的語法。對于查詢類型的實例下標(biāo)括在方括號內(nèi),接著是實例名稱。下標(biāo)語法遵循結(jié)構(gòu)作為 “實例方法” 和 “計算屬性” 相同的語法。“subscript” 關(guān)鍵字用來定義標(biāo),用戶可以指定一個或多個參數(shù),它們帶有返回類型。下標(biāo)可以有讀寫或只讀屬性和實例存儲和檢索使用 “getter” 和 “setter” 屬性作為計算屬性。
subscript(index:Int)->Int{get{// used for subscript value declarations}set(newValue){// definitions are written here}}
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")
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
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
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])
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
Sunday Monday Tuesday Wednesday
下標(biāo)采用單一到多元的輸入?yún)?shù),這些輸入?yún)?shù)也屬于任意數(shù)據(jù)類型。還可以使用變量,可變參數(shù)的參數(shù)。下標(biāo)不能提供缺省參數(shù)值,或使用任何 in-out 參數(shù)。
定義多個標(biāo)被稱為“下標(biāo)重載'在一個類 或結(jié)構(gòu)體根據(jù)需要可以提供多個下標(biāo)定義。這些多個標(biāo)是基于被下標(biāo)括號內(nèi)聲明值的類型推斷。
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])")
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
1.0 2.0 3.0 5.0
Swift 下標(biāo)支持單參數(shù)到多參數(shù)聲明相應(yīng)數(shù)據(jù)類型。該程序聲明的“矩陣”結(jié)構(gòu)為2*2維數(shù)組矩陣來存儲 “Double” 數(shù)據(jù)類型。 矩陣參數(shù)被輸入整數(shù)數(shù)據(jù)類型用來聲明行和列。
矩陣新實例是通過使行和列數(shù)來初始化創(chuàng)建的,如下所示。
var mat = Matrix(rows: 3, columns: 3)
矩陣值可通過傳遞行和列值到下標(biāo),通過逗號隔開,進行定義如下所示。
mat[0,0] = 1.0 mat[0,1] = 2.0 mat[1,0] = 3.0 mat[1,1] = 5.0