詳解Swift編程中下標的用法。本站提示廣大學習愛好者:(詳解Swift編程中下標的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解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
下標辦法的界說
下標辦法的界說語法與實例辦法和盤算屬性的語法相似。
下標辦法應用subscript症結字來指導是一個下標辦法。與實例辦法一樣,下標辦法界說中可以劃定一個或多個輸出參數,並帶有一個前往類型。與實例辦法分歧的是下標辦法可所以可讀寫的或是只讀的。與盤算屬性的界說一樣,下標辦法經由過程應用getter和setter來轉達下標辦法的行動。假如鄙人標辦法的界說中getter和setter都被指定,則界說了一個可讀寫的下標辦法,假如下標辦法的界說中不包括setter,則界說了一個只讀的下標辦法,而且這時候代表getter辦法的症結字get也能夠省略。下標辦法界說的完全語法以下:
subscript(index:Int) ->Int {
get {
// return an appropriate subscript value here
}
set(newValue) {
// perform a suitable setting action here
}
}
該例界說了一個可讀寫的下標辦法,newValue可以指定,也能夠不指定,不指准時應用默許的參數名newValue。
以下例子展現了一個只讀下標辦法的界說和應用。因為只讀下標辦法只指定一個getter,意義是明白的,是以可以省略get症結字。
struct TimesTable {
let multiplier:Int
subscript(index:Int) ->Int {
return multiplier *index
}
}
let threeTimesTable =TimesTable(multiplier:3)
println("six times three is\(threeTimesTable[6])")
// prints "six times three is 18”
下標辦法的應用
你能為一個類型界說和完成多個下標辦法,編譯器基於你傳送給下標辦法的索引參數的類型來揣摸和選擇恰當的下標辦法。
與辦法相似,下標辦法可以包括隨意率性數目的輸出參數,且這些輸出參數的類型可所以任何類型,下標辦法也能前往任何類型。下標辦法也能應用可變參數,但不克不及應用in-out參數也不克不及經由過程默許參數值。
如可以界說一個帶有多個輸出參數的表現多緯度的下標辦法,上面的例子展現了若何為一個矩陣構造界說一個帶兩個整數類型的下標辦法和若何應用,界說的下標辦法用來索引矩陣中界說的兩緯度的元素。
struct Matrix {
let rows:Int,columns:Int
var grid:Double[]
init(rows:Int,columns:Int) {
self.rows =rows
self.columns =columns
grid =Array(count:rows *columns,repeatedValue:0.0)
}
subscript(row:Int,column:Int) ->Double {
get {
return grid[(row *columns) +column]
}
set {
grid[(row *columns) +column] =newValue
}
}
}
var matrix =Matrix(rows:2,columns:2)
matrix[0,1] =1.5
matrix[1,0] =3.2