Swift學習(十一):下標(結構體和類作爲下標返回值的對比)

下標(subscript)

  • 使用subscript可以給任意類型(枚舉、結構體、類)增加下標功能,有些地方也翻譯爲:下標腳本
  • subscript的語法類似於實例方法、計算屬性,本質就是方法(函數),(語法書寫方式[ ])

p[0] = 11.1的賦值原理是調用了subscript的setter方法,反彙編代碼如圖:

同理可得:print(p[0])的獲取值的原理是調用了subscript的getter方法

  • subscript中定義的返回值類型決定了 
  1. get方法的返回值類型
  2. set方法中newValue的類型
  •  subscript可以接受多個參數,並且類型任意

下標的細節

  • subscript可以沒有set方法,但必須要有get方法

  • 如果只有get方法,可以省略get

  • 可以設置參數標籤 

  • 下標可以是類型方法


結構體、類作爲返回值對比

  • 類作爲返回值:

  1.  當執行 pm[0].x = 11 和 pm[0].y = 22 這兩個方法時:我們可以看出雖然subscript只有get方法,但是由於pm實例裏存儲的是對象地址,我們當然可以把x和y被賦的值11和22放進這個對象地址所指向的存儲空間,所以不會報錯, 
  2. 但是當結構體作爲返回值只有get沒有set方法時,執行pm[0].x = 11會報錯,那是因爲結構體是值類型,它不佔用內存空間,沒有set方法相當於只在外部臨時申請的空間修改,並不會真正修改結構體裏的東西,所以會報錯
  3. 這裏的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)
  4. 也就是說類作爲返回值沒有set方法也可以賦值,但是結構體不可以。

 

  • 結構體作爲返回值


拼接多個參數的下標

輸出結果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章