Swift 3.0之十二廓潜、下標(biāo)

類抵皱、結(jié)構(gòu)體和枚舉可以定義下標(biāo),它可以作為訪問集合辩蛋、列表或序列成員元素的快捷方式呻畸。

1. 下標(biāo)的語法

  • 使用關(guān)鍵字 subscript 來定義下標(biāo)
  • 參數(shù)為一個或多個
  • 使用getter獲取值,setter設(shè)置值。(setter可以省略堪澎,即只讀下標(biāo))

書寫形式為:

subscript(index: Int) -> Int {
    get {
        // 在此處返回合適的值
    }
    set(newValue) {  // setter默認(rèn)提供形式參數(shù)newValue,類型和下標(biāo)的返回值一致.
        // 在此處設(shè)置合適的值
    }
}

與只讀計算屬性一樣擂错,可以給只讀下標(biāo)省略get關(guān)鍵字:

subscript(index: Int) -> Int {
    // 在此處返回合適的值
}

舉個栗子,定義一個TimeTable結(jié)構(gòu)體來表示整數(shù)的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])")
// 結(jié)果為: "six times three is 18"

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

  • 下標(biāo)數(shù)量可以為一個或多個
  • 下標(biāo)的輸入類型可以是變量或可變形式參數(shù)樱蛤,但不能為inout類型钮呀,也不可以提供默認(rèn)值
  • 類或者結(jié)構(gòu)體可以有多個下標(biāo)實(shí)現(xiàn),使用時根據(jù)下標(biāo)類型進(jìn)行推斷

舉個下標(biāo)數(shù)量為2個的栗子昨凡,定義了一個 Matrix 結(jié)構(gòu)體爽醋,呈現(xiàn)一個 Double 類型的二維矩陣:

struct Matrix {
    let rows: Int, columns: Int
    var grid: [Double]
    
    init(rows: Int, columns: Int) {  // 初始化一個數(shù)組,包含 row * colimn 個0.0
        self.rows = rows
        self.columns = columns
        grid = Array(count: rows * columns, repeatedValue: 0.0)
    }
    
    // indexIsValidForRow方法用來檢查輸入的下標(biāo)是否越界
    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
        }
    }
}

構(gòu)造一個 Matrix 實(shí)例:

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

設(shè)置 Matrix 中的值:

matrix[0, 1] = 1.5
matrix[1, 0] = 3.2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末便脊,一起剝皮案震驚了整個濱河市蚂四,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖遂赠,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件久妆,死亡現(xiàn)場離奇詭異,居然都是意外死亡跷睦,警方通過查閱死者的電腦和手機(jī)筷弦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抑诸,“玉大人烂琴,你說我怎么就攤上這事⊥上纾” “怎么了奸绷?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長层玲。 經(jīng)常有香客問我号醉,道長,這世上最難降的妖魔是什么称簿? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任扣癣,我火速辦了婚禮,結(jié)果婚禮上憨降,老公的妹妹穿的比我還像新娘父虑。我一直安慰自己,他們只是感情好授药,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布士嚎。 她就那樣靜靜地躺著,像睡著了一般悔叽。 火紅的嫁衣襯著肌膚如雪莱衩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天娇澎,我揣著相機(jī)與錄音笨蚁,去河邊找鬼。 笑死趟庄,一個胖子當(dāng)著我的面吹牛括细,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戚啥,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼奋单,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了猫十?” 一聲冷哼從身側(cè)響起览濒,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤呆盖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贷笛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體应又,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年乏苦,在試婚紗的時候發(fā)現(xiàn)自己被綠了丁频。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡邑贴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叔磷,到底是詐尸還是另有隱情拢驾,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布改基,位于F島的核電站繁疤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秕狰。R本人自食惡果不足惜稠腊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸣哀。 院中可真熱鬧架忌,春花似錦、人聲如沸我衬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挠羔。三九已至井仰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間破加,已是汗流浹背俱恶。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留范舀,地道東北人合是。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像尿背,于是被迫代替她去往敵國和親端仰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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