下標(biāo)腳本(Subscripts)

用下標(biāo)腳本訪問一個數(shù)組(Array)實例中的元素可以這樣寫 someArray[index] 壁袄,訪問字典(Dictionary)實例中的元素可以這樣寫 someDictionary[key]益缎。

注意:
Swift 中字典的附屬腳本實現(xiàn)中,在get部分返回值是Int?然想,上例中的numberOfLegs字典通過附屬腳本返回的是一個Int?或者說“可選的int”莺奔,不是每個字典的索引都能得到一個整型值,對于沒有設(shè)過值的索引的訪問返回的結(jié)果就是nil变泄;同樣想要從字典實例中刪除某個索引下的值也只需要給這個索引賦值為nil即可令哟。

下標(biāo)腳本語法

定義下標(biāo)腳本使用subscript關(guān)鍵字,顯式聲明入?yún)ⅲㄒ粋€或多個)和返回類型妨蛹。與實例方法不同的是下標(biāo)腳本可以設(shè)定為讀寫或只讀屏富。這種方式又有點像計算型屬性的getter和setter:

subscript(index: Int) -> Int {
get {
  // 返回與入?yún)⑵ヅ涞腎nt類型的值
}

set(newValue) {
  // 執(zhí)行賦值操作
}
}

newValue的類型必須和下標(biāo)腳本定義的返回類型相同。與計算型屬性相同的是set的入?yún)⒙暶鱪ewValue就算不寫蛙卤,在set代碼塊中依然可以使用默認(rèn)的newValue這個變量來訪問新賦的值狠半。

與只讀計算型屬性一樣,可以直接將原本應(yīng)該寫在get代碼塊中的代碼寫在subscript中:

subscript(index: Int) -> Int {
// 返回與入?yún)⑵ヅ涞腎nt類型的值
}

使用方法:

struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("3的6倍是\(threeTimesTable[6])")
// 輸出 "3的6倍是18”

下標(biāo)腳本選項

下標(biāo)腳本允許任意數(shù)量的入?yún)⑺饕眩⑶颐總€入?yún)㈩愋鸵矝]有限制神年。下標(biāo)腳本的返回值也可以是任何類型。下標(biāo)腳本可以使用變量參數(shù)和可變參數(shù)行嗤,但使用寫入讀出(in-out)參數(shù)或給參數(shù)設(shè)置默認(rèn)值都是不允許的已日。

下標(biāo)腳本可重載

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)
}
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")
        return grid[(row * columns) + column]
    }
    set {
        assert(indexIsValidForRow(row, column: column), "Index out of range")
        grid[(row * columns) + column] = newValue
    }
}
}

Matrix提供了一個兩個入?yún)⒌臉?gòu)造方法,入?yún)⒎謩e是rows和columns栅屏,創(chuàng)建了一個足夠容納rows * columns個數(shù)的Double類型數(shù)組飘千。通過傳入數(shù)組長度和初始值0.0到數(shù)組的一個構(gòu)造器堂鲜,將Matrix中每個元素初始值0.0。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末护奈,一起剝皮案震驚了整個濱河市缔莲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霉旗,老刑警劉巖酌予,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奖慌,居然都是意外死亡抛虫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門简僧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來建椰,“玉大人,你說我怎么就攤上這事岛马∶藿悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵啦逆,是天一觀的道長伞矩。 經(jīng)常有香客問我,道長夏志,這世上最難降的妖魔是什么乃坤? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮沟蔑,結(jié)果婚禮上湿诊,老公的妹妹穿的比我還像新娘。我一直安慰自己瘦材,他們只是感情好厅须,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著食棕,像睡著了一般朗和。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上簿晓,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天眶拉,我揣著相機與錄音,去河邊找鬼抢蚀。 笑死镀层,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的皿曲。 我是一名探鬼主播唱逢,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屋休!你這毒婦竟也來了坞古?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤劫樟,失蹤者是張志新(化名)和其女友劉穎痪枫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叠艳,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡奶陈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了附较。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吃粒。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拒课,靈堂內(nèi)的尸體忽然破棺而出徐勃,到底是詐尸還是另有隱情,我是刑警寧澤早像,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布僻肖,位于F島的核電站,受9級特大地震影響卢鹦,放射性物質(zhì)發(fā)生泄漏臀脏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一冀自、第九天 我趴在偏房一處隱蔽的房頂上張望谁榜。 院中可真熱鬧,春花似錦凡纳、人聲如沸窃植。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷怜。三九已至,卻和暖如春暴氏,著一層夾襖步出監(jiān)牢的瞬間延塑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工答渔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留关带,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像宋雏,于是被迫代替她去往敵國和親芜飘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 下標(biāo)腳本可以定義在類磨总、結(jié)構(gòu)體和枚舉中嗦明,即是訪問集合、列表蚪燕、學(xué)列的快捷方式娶牌,使用下標(biāo)腳本的索引設(shè)置和獲取值,不需要再...
    EndEvent閱讀 355評論 0 3
  • 官方文檔 下標(biāo)腳本 類馆纳,結(jié)構(gòu)體和枚舉可以定義下標(biāo)腳本诗良,下標(biāo)腳本可以認(rèn)為是訪問集合(collection),列表或序...
    hrscy閱讀 248評論 1 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,805評論 1 10
  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點數(shù)的類型時鲁驶,Swift 總是會選擇Double而不是Float鉴裹。 結(jié)合...
    gamper閱讀 1,288評論 0 7
  • Swift屬性 Swift屬性將值跟特定的類,結(jié)構(gòu)體灵嫌,枚舉關(guān)聯(lián)壹罚。分為存儲屬性和計算屬性,通常用于特定類型的實例寿羞。屬...
    小小廚師閱讀 854評論 0 0