下標(subscript)
- 使用subscript可以給任意類型(枚舉、結構體、類)增加下標功能,有些地方也翻譯爲:下標腳本
- subscript的語法類似於實例方法、計算屬性,本質就是方法(函數),(語法書寫方式[ ])
p[0] = 11.1的賦值原理是調用了subscript的setter方法,反彙編代碼如圖:
同理可得:print(p[0])的獲取值的原理是調用了subscript的getter方法
- subscript中定義的返回值類型決定了
- get方法的返回值類型
- set方法中newValue的類型
- subscript可以接受多個參數,並且類型任意
下標的細節
- subscript可以沒有set方法,但必須要有get方法
- 如果只有get方法,可以省略get
- 可以設置參數標籤
- 下標可以是類型方法
結構體、類作爲返回值對比
- 類作爲返回值:
- 當執行 pm[0].x = 11 和 pm[0].y = 22 這兩個方法時:我們可以看出雖然subscript只有get方法,但是由於pm實例裏存儲的是對象地址,我們當然可以把x和y被賦的值11和22放進這個對象地址所指向的存儲空間,所以不會報錯,
- 但是當結構體作爲返回值只有get沒有set方法時,執行pm[0].x = 11會報錯,那是因爲結構體是值類型,它不佔用內存空間,沒有set方法相當於只在外部臨時申請的空間修改,並不會真正修改結構體裏的東西,所以會報錯
- 這裏的pm[0].x = 11相當於:pm[0] = Point (x: 11, y: pm[0].y),pm[0].y = 22相當於:pm[0] = Point (pm[0].x , y: 22)
- 也就是說類作爲返回值沒有set方法也可以賦值,但是結構體不可以。
- 結構體作爲返回值
拼接多個參數的下標
輸出結果: