類、結構體和列舉都可以定義下標,這是一種訪問集合型別、列表或者佇列的成員元素的簡寫方式。你可以用下標來設定和取出對應的值,而不必單獨設定寫入和讀取的方法。例如,訪問array例項用somearray[index],訪問dictionary例項用somedictionary[key]。
可以為同乙個型別定義多種下標,選擇哪一種下標形式則取決於你要傳遞給下標的索引值的型別。下標的維度不限定為一維,你可以根據自己的需要給下標設定多個輸入引數。
下標可以允許你在例項名字後面的中寫上乙個或多個值來對這個例項進行query。下標的語法與例項方法和計算屬性的語法類似。和例項方法一樣,下標有傳入引數和返回型別。不同於例項方法的是,下標可以可讀可寫或者唯讀的。和計算屬性一樣,下標有get和set:
1 subscript(index: int) ->int5set
(newvalue)
8 }
newvalue的型別和subscript的返回型別相同。和計算屬性一樣,如果你不指定新值的引數名,則預設使用newvalue。
唯讀下標:
1 subscript(index: int) ->int
下面是乙個唯讀下標的例子:
1struct
timestable 6}
7 let threetimestable = timestable(multiplier: 3
)8 print("
six times three is \(threetimestable[6])")
9//prints "six times three is 18"
subscript的實際意義取決於它所處的環境。通常,subscript用於方便訪問集合、列表、佇列的成員。你可以根據自己的需求來定義subscript的實現。
例如,dictionary的下標:
1 var numberoflegs = ["spider
": 8, "
ant": 6, "
cat": 4
]2 numberoflegs["
bird
"] = 2
注意:dictionary的下標返回的是int?型別,因為並非每乙個key都能對應乙個value,如果輸入的key不存在,則返回nil。
subscript可以接收任意數量的引數,這些引數可以是任何型別。
subscript也可以返回一種型別的值。
subscript可以接收變數引數和不定引數,但是不能接收in-out引數,也不能有引數預設值。
類和結構體可以定義多種subscript的實現,使用哪一種實現則取決於中傳入的引數型別。多種subscript的實現,也稱為subscript過載。
儘管最常見的是乙個引數的subscript,你可以根據需要定義多個引數。
1struct
matrix
9 func indexisvalid(row: int, column: int) ->bool
12 subscript(row: int, column: int) ->double
17set21}
22 }
上面是 乙個矩陣的結構體。
用下標的方式來訪問和修改陣列的值。
在subscript的get和set中都用了斷言來檢查下標是否有效,其中,用了乙個indexisvalid(row:column:)方法:
1 func indexisvalid(row: int, column: int) ->bool
如果下標超出了矩陣的範圍,就會產生乙個assertion:
1 let somevalue = matrix[2, 2]2//this triggers an assert, because [2, 2] is outside of the matrix bounds
Swift3 0基本語法01
import uikit let a int 10 錯誤寫法,當乙個識別符號定義為常量時是不可以修改的 a 20 var b int 20 因為b定義為變數,因此是可以修改的 b 30import uikit 常量使用注意 1 優先使用常量 2 常量的本質 1.注意一 在開發中let var在選擇時...
Swift3 0之基本語法01
import uikit let a int 10 錯誤寫法,當乙個識別符號定義為常量時是不可以修改的 a 20 var b int 20 因為b定義為變數,因此是可以修改的 b 30import uikit 常量使用注意 1 優先使用常量 2 常量的本質 1.注意一 在開發中let var在選擇時...
Swift學習 1基礎語法
swift 基礎語法 基本1.取消了預處理命令 2.取消了指標的概念 3.取消了ns字首 4.大量將類替換成struct 5.在同一行用來分割語句,如果不是同一行可以省略 6.可選項 7.playground 8.條件語句 if 空執行 9.沒有非0即真的邏輯 10.switch 1 可以針對任意型...