前言
下標這個概念,可能在乍看之下,根本不知道它具體想要表達的是什麼,若要談論其功能,那勢必不能脫離兩件事:存取值與設置值。
何以見得呢?
下標的語法在過去兩個篇章:陣列、字典中其實就是以下標的概念去組建的:
在陣列或字典名稱後面緊接著中括號[]
,括號內填入陣列的索引值(index
)或是字典的鍵(key
),即可存取或設置值。(資料來源:Swift起步走)
而承繼在計算屬性的篇章中談論過getter、setter兩個功用,即為存取值、設置其他屬性的值。
因此,本篇章會著重於描述兩件事情:
- getter、setter的概念梳理
- 下標的用法
正文
1.get、set的運作

get在實務上的運作,基本上是這樣:
當你執行了上述這張圖的程式的時候,打印sum本身的時候,你會直接得到的是它在get中,被讀取的return的內容,所以也就是說,sum這個時候的本質讀取了你設定好的運算,並返還給你而已。
而這個就被稱為是唯讀計算屬性。唯讀計算屬性總是回傳一個值,可以通過點運算子存取,但不能設置新的值。(資料來源:《The Swift of Programming Language》中文版)
至於set在實際上的運作:
則是你要先賦予sum一個值,比如我賦予它5這個數值,然後這個時候我再操作受set影響的變數num2,這個時候,他就會重新將你賦予sum的值進入set裡運算,實際上出來的值就是你所設定受影響的對象,在上述的程式中,就是num2。
而跟唯讀性相反的就是set的功能,它生而賦值,所以在概念上,它是一個對值進行更改的角色。
下標腳本(subscripts)
下標腳本 可以定義在類別(Class)、結構(structure)和列舉(enumeration)這些目標中,可以認為是存取物件、集合或序列的快捷方式,不需要再呼叫實例的特定的賦值和存取方法。
舉例來說,用下標腳本存取一個陣列(Array)實例中的元素可以這樣寫
someArray[index]
,存取字典(Dictionary)實例中的元素可以這樣寫someDictionary[key]
。
在下標腳本的語法中,大致會呈現下面的樣態

實際上操作會是這個樣子:

在上面這個程式裡,基本上實質操作的就是get,經過賦值之後,會直接的回傳return index +1的內容回來。
而通常我們也可以不放get這個字眼,它是可以省略的:

程式中,我們就把get字樣省略了,這樣基本上還是可以保證我們在操作的時候會回傳值。
不過基本上在運作下標腳本的時候,就跟我們在運作Array[0]是一樣的概念,然後它會回傳第一項,而下標腳本在做的事情也跟它一樣,比如上述的例子,我在這裡是將結構SomeCalculate實體化為some後,以some[6]輸入值,而得出7這個數字。
這個概念跟陣列非常相似對吧!
假如今天我要在下標腳本操作set呢,原則上原理就跟上面的set是一樣的!