10-Swift下標腳本(Subscripts)

下標腳本可以定義在類箩帚、結(jié)構(gòu)體和枚舉中真友,即是訪問集合、列表紧帕、學(xué)列的快捷方式盔然,使用下標腳本的索引設(shè)置和獲取值,不需要再調(diào)用實例特定的賦值和訪問方法是嗜。


一愈案、下標腳本語法


下標腳本允許通過實例方法后面的方括號傳入一個或多個的索引值來對實例進行訪問和賦值。語法類似于實例方法和計算屬性的混合鹅搪。與定義實例方法類似站绪,定義下標腳本使用subscript關(guān)鍵字,顯式聲明入?yún)⒑头祷仡愋屠鍪痢Ec實例方法不同的是下標腳本可以設(shè)定為讀寫或只讀恢准,而這種方式類似計算屬性的getter和setter:

class Student {
    // 學(xué)號
    var studentNumber:Int = 0;
    // 下標腳本
    subscript(index:Int) ->Int {
        get {
            // 返回與入?yún)⑵ヅ涞腎nt類型值
            // 例如學(xué)號: 11060101xxx
            return (11_060_101_000 + studentNumber);
        }
        set(newValue) { // newValue是默認的,也可以省略不寫
            // 執(zhí)行賦值操作
            studentNumber = newValue;
        }
    }
}
// 實例化
let student = Student();
// 下標腳本 - set
student[3] = 3;
// 下標腳本 - get
print("學(xué)號:\(student[3])");
輸出結(jié)果:
學(xué)號:11060101003


二甫题、下標腳本用法


例如馁筐,swift中字典的實現(xiàn)通過下標腳本來對其實例中存放的值進行存取操作。在下標腳本中使用和字典的索引類型的值幔睬,并把一個字典類型的值賦值給這個下標腳本:

var dict = ["num1":3, "num2":4, "num3":5, "num4":6, "num5":7];
// 設(shè)置字典的值
dict["num3"] = 13;
print(dict["num3"]!);
輸出結(jié)果:
13

swift中字典的腳本實現(xiàn)中眯漩,在get部分返回值的可選類型的。例如上面代碼麻顶,返回值是Int?,不是每個字典的索引都能得到一個整形值舱卡,對于沒有設(shè)置值的索引訪問返回的結(jié)果是nil辅肾,同樣想刪除字典中的某個索引對應(yīng)的值,只需要給索引賦值為nil即可轮锥。


三矫钓、下標腳本選項


下標腳本允許任意數(shù)量的入?yún)⑺饕⒚總€入?yún)㈩愋蜎]有限制舍杜。類或結(jié)構(gòu)體可以根據(jù)自身需要提供多個下標腳本實現(xiàn)新娜,在定義下標腳本時通過入?yún)⒌念愋瓦M行區(qū)分,使用下標腳本時會自動匹配合適的下標腳本運行既绩,這即是下標腳本的重載:

/** 
 實現(xiàn)功能: 傳入兩個參數(shù)以及操作
*/
// 加減乘除枚舉
enum ArithmeticSign {
    // 對應(yīng)加減乘除
    case Add, Subtract, Multiply, Divide;
}

// 計算類
class ComputeClass {
    var value:Double = 0.0;
    
    // 計算方法
    func compute(num1:Double, num2:Double, sign:ArithmeticSign) -> Double {
        switch sign {
        case .Add:
            value = num1 + num2;
        case .Subtract:
            value = num1 - num2;
        case .Multiply:
            value = num1 * num2;
        case .Divide:
            value = num1 / num2;
        }
        return value;
    }
    
    // 下標腳本
    subscript(num1:Double, num2:Double, sign:ArithmeticSign) -> Double {
        get {
            value = compute(num1, num2: num2, sign: sign);
            return value;
        }
    }
}
// 實例對象
let compute = ComputeClass();
// 通過下標腳本獲取獲取對應(yīng)的值
print("1 + 2 = \(compute[1,2,ArithmeticSign.Add])");
print("3 * 3 = \(compute[3,3,ArithmeticSign.Multiply])");
輸出結(jié)果:
1 + 2 = 3.0
3 * 3 = 9.0


注:xcode7.3環(huán)境

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末概龄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饲握,更是在濱河造成了極大的恐慌私杜,老刑警劉巖蚕键,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異衰粹,居然都是意外死亡锣光,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門铝耻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來誊爹,“玉大人,你說我怎么就攤上這事瓢捉∑登穑” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵泊柬,是天一觀的道長椎镣。 經(jīng)常有香客問我,道長兽赁,這世上最難降的妖魔是什么状答? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮刀崖,結(jié)果婚禮上惊科,老公的妹妹穿的比我還像新娘。我一直安慰自己亮钦,他們只是感情好馆截,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜂莉,像睡著了一般蜡娶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上映穗,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天窖张,我揣著相機與錄音,去河邊找鬼蚁滋。 笑死宿接,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的辕录。 我是一名探鬼主播睦霎,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼走诞!你這毒婦竟也來了副女?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤速梗,失蹤者是張志新(化名)和其女友劉穎肮塞,沒想到半個月后襟齿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡枕赵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年猜欺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拷窜。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡开皿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篮昧,到底是詐尸還是另有隱情赋荆,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布懊昨,位于F島的核電站窄潭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏酵颁。R本人自食惡果不足惜嫉你,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躏惋。 院中可真熱鬧幽污,春花似錦、人聲如沸簿姨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扁位。三九已至准潭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間域仇,已是汗流浹背惋鹅。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殉簸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓沽讹,卻偏偏與公主長得像般卑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爽雄,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • Swift屬性 Swift屬性將值跟特定的類蝠检,結(jié)構(gòu)體,枚舉關(guān)聯(lián)挚瘟。分為存儲屬性和計算屬性叹谁,通常用于特定類型的實例饲梭。屬...
    小小廚師閱讀 854評論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,801評論 1 10
  • 基礎(chǔ)部分(The Basics) 當推斷浮點數(shù)的類型時,Swift 總是會選擇Double而不是Float焰檩。 結(jié)合...
    gamper閱讀 1,286評論 0 7
  • 常量與變量使用let來聲明常量憔涉,使用var來聲明變量。聲明的同時賦值的話析苫,編譯器會自動推斷類型兜叨。值永遠不會被隱式轉(zhuǎn)...
    莫_名閱讀 448評論 0 1
  • 官方文檔 下標腳本 類,結(jié)構(gòu)體和枚舉可以定義下標腳本衩侥,下標腳本可以認為是訪問集合(collection)国旷,列表或序...
    hrscy閱讀 248評論 1 1