Swift教程之下標(biāo)

下標(biāo)

類、結(jié)構(gòu)體和枚舉可以定義下標(biāo)蝙泼,它們是訪問集合甸私、列表或序列的成員元素的快捷方式∧腥停可以使用下標(biāo)通過索引設(shè)置和檢索值,而不需要單獨(dú)的設(shè)置和檢索方法默垄。

可以為多個(gè)類型定義下標(biāo)此虑,并根據(jù)傳遞給下標(biāo)的索引值的類型來選擇要使用的適當(dāng)?shù)南聵?biāo)重載。下標(biāo)不限于單個(gè)維度口锭,可以使用多個(gè)輸入?yún)?shù)定義下標(biāo)以滿足自定義類型的需求朦前。

<br />

下標(biāo)語法

下標(biāo)語法類似于實(shí)例方法和計(jì)算型屬性語法,使用subscript關(guān)鍵字編寫下標(biāo)定義鹃操,并以與實(shí)例方法相同的方式指定一個(gè)或多個(gè)輸入?yún)?shù)和返回類型韭寸。與實(shí)例方法不同,下標(biāo)可以是讀寫或只讀荆隘。

subscript(index: Int) -> Int {
    get {
        // return an appropriate subscript value here
    }
    set(newValue) {
        // perform a suitable setting action here
    }
}

newValue的類型與下標(biāo)的返回值相同恩伺,可以自定setter的參數(shù)名稱。

只讀下標(biāo)語法:

subscript(index: Int) -> Int {
    // return an appropriate subscript value here
}

以下是一個(gè)只讀下標(biāo)實(shí)現(xiàn)的例子:

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// Prints "six times three is 18"

<br />

下標(biāo)選項(xiàng)

下標(biāo)可以使用任意數(shù)量的任何類型的可變參數(shù)臭胜,也可以返回任何類型莫其。下標(biāo)可以使用可變參數(shù),但不能使用in-out參數(shù)或設(shè)置默認(rèn)參數(shù)值耸三。

下標(biāo)通常使用單個(gè)參數(shù)乱陡,也可以使用多個(gè)參數(shù)來定義下標(biāo)以適用類型。

下面聲明一個(gè)具有下標(biāo)的Matrix結(jié)構(gòu)體仪壮,通過行憨颠、列數(shù)初始化一個(gè)元素全為0的二維矩陣,使用下標(biāo)可獲取并設(shè)置矩陣中某行某列的值。

struct Matrix {
    let rows: Int, columns: Int
    var grid: [Double]
    init(rows: Int, columns: Int) {
        self.rows = rows
        self.columns = columns
        grid = Array(repeating: 0.0, count: rows * columns)
    }
    func indexIsValid(row: Int, column: Int) -> Bool {
        return row >= 0 && row < rows && column >= 0 && column < columns
    }
    subscript(row: Int, column: Int) -> Double {
        get {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            return grid[(row * columns) + column]
        }
        set {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            grid[(row * columns) + column] = newValue
        }
    }
}

var matrix = Matrix(rows: 2, columns: 2)

matrix[0, 1] = 1.5
matrix[1, 0] = 3.2

let someValue = matrix[2, 2]
// this triggers an assert, because [2, 2] is outside of the matrix bounds
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爽彤,一起剝皮案震驚了整個(gè)濱河市养盗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌适篙,老刑警劉巖往核,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嚷节,居然都是意外死亡聂儒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門硫痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衩婚,“玉大人,你說我怎么就攤上這事效斑》谴海” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵缓屠,是天一觀的道長(zhǎng)奇昙。 經(jīng)常有香客問我,道長(zhǎng)藏研,這世上最難降的妖魔是什么敬矩? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任概行,我火速辦了婚禮蠢挡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凳忙。我一直安慰自己业踏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布涧卵。 她就那樣靜靜地躺著勤家,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柳恐。 梳的紋絲不亂的頭發(fā)上伐脖,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音乐设,去河邊找鬼讼庇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛近尚,可吹牛的內(nèi)容都是我干的蠕啄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼歼跟!你這毒婦竟也來了和媳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤哈街,失蹤者是張志新(化名)和其女友劉穎留瞳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骚秦,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撼港,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骤竹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帝牡。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒙揣,靈堂內(nèi)的尸體忽然破棺而出靶溜,到底是詐尸還是另有隱情,我是刑警寧澤懒震,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布罩息,位于F島的核電站,受9級(jí)特大地震影響个扰,放射性物質(zhì)發(fā)生泄漏瓷炮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一递宅、第九天 我趴在偏房一處隱蔽的房頂上張望娘香。 院中可真熱鬧,春花似錦办龄、人聲如沸烘绽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽安接。三九已至,卻和暖如春英融,著一層夾襖步出監(jiān)牢的瞬間盏檐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工驶悟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胡野,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓撩银,卻偏偏與公主長(zhǎng)得像给涕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理够庙,服務(wù)發(fā)現(xiàn)恭应,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點(diǎn)數(shù)的類型時(shí)耘眨,Swift 總是會(huì)選擇Double而不是Float昼榛。 結(jié)合...
    gamper閱讀 1,264評(píng)論 0 7
  • Swift屬性 Swift屬性將值跟特定的類,結(jié)構(gòu)體剔难,枚舉關(guān)聯(lián)胆屿。分為存儲(chǔ)屬性和計(jì)算屬性,通常用于特定類型的實(shí)例偶宫。屬...
    小小廚師閱讀 837評(píng)論 0 0
  • 2017年2月9日
    梧桐165閱讀 93評(píng)論 0 0
  • 周五了非迹,木哥、秋哥纯趋、我(蔣哥)憎兽,三人工作餐烤肉走起!他兩都是我的領(lǐng)導(dǎo)吵冒,秋哥是我的頂頭領(lǐng)導(dǎo)——主案纯命,木哥是我兩的共同...
    不一樣的Jing閱讀 271評(píng)論 0 0