類、結(jié)構(gòu)體和枚舉都可以定義下標(biāo)洒琢,一種訪問集合(collection)察纯、列表(list)和序列(sequence)的快捷方式帕棉。和OC類似。
一個(gè)類型可以定義多個(gè)下標(biāo)饼记,通過不同的索引值重載香伴。并且下標(biāo)不僅限于一維的,也可以根據(jù)需求定義多個(gè)參數(shù)的下標(biāo)具则。
下標(biāo)語法(Subscript Syntax)
下標(biāo)允許通過在實(shí)例名稱后的方括號(hào)中傳入一個(gè)或者多個(gè)索引值來對(duì)實(shí)例進(jìn)行存取即纲。有點(diǎn)類似實(shí)例方法的語法和計(jì)算型屬性語法的混合。定義下標(biāo)使用 subscript 關(guān)鍵字博肋,指定一個(gè)或多個(gè)輸入?yún)?shù)和返回值低斋,與實(shí)例方法不同,下標(biāo)可以設(shè)定為讀寫或只讀(有點(diǎn)類似計(jì)算屬性):
下標(biāo)用法(Subscript Usage)
下標(biāo)的用法要根據(jù)具體的情況來定匪凡,不過通常都是作為訪問集合膊畴、列表和序列中元素的快捷方式。當(dāng)然锹雏,也可以通過上面的語法來自由的來實(shí)現(xiàn)下標(biāo):
var numberOfLegs = ["spider": 8, "ant": 6, "dog": 4]
numberOfLegs["bird"] = 2
注意
Swift的字典類型的下標(biāo)接受并返回可選類型的值巴比。之所以這樣是因?yàn)椴皇敲總€(gè)鍵都有值相對(duì)應(yīng),同時(shí)礁遵,這也提供了一種可以通過鍵來刪除對(duì)應(yīng)值的方式轻绞,就是將鍵所對(duì)應(yīng)的自己設(shè)為 nil 即可。
下標(biāo)選項(xiàng)(Subscript Options)
下標(biāo)可以接受任意數(shù)量的輸入?yún)?shù)佣耐,并且接受任何類型的參數(shù)政勃,也可以返回任何類型。下標(biāo)可以使用可變參數(shù)兼砖,但是不能用 in-out 參數(shù)或者提供默認(rèn)值奸远。
如果需要,類或者結(jié)構(gòu)體可以提供多個(gè)下標(biāo)實(shí)現(xiàn)讽挟。根據(jù)值的類型或在下標(biāo)被使用時(shí)的方括號(hào)中的值進(jìn)行推斷懒叛,匹配合適的下標(biāo)。(這句話太長(zhǎng)了耽梅,下面給原句)這就是下標(biāo)重載薛窥。
A class or structure can provide as many subscript implementations as it needs, and the appropriate subscript to be used will be inferred based on the types of the value or values that are contained within the subscript brackets at the point that the subscript is used.
雖然常用的方法是傳入單一的下標(biāo),但是還是可以根據(jù)具體的情況傳入多個(gè)下標(biāo):