在之前的博客中,討論過在Objective-C中,經過下標的方式訪問自定義數據模型的方法。Objective-C中主要是經過實現一系列方法來使自定義的數據類型支持下標的訪問方式,博客地址以下:spa
在Objective-C中使用下標訪問自定義數據模型:http://my.oschina.net/u/2340880/blog/632294。.net
Swift中的Array,Dictionary類型能夠經過下標或者鍵值的方式來進行數據的訪問,實際上在Swift的語法中,下標能夠定義在類、結構體、枚舉中。開發者能夠經過下標的方式來對屬性進行訪問而不用使用專門的存取方法。而且定義的下標不限於一維,開發者能夠定義多維的下標來知足需求。code
下標使用subscript來定義,其有些相似於方法,參數和返回值分別做爲下標入參和經過下標所取的值。可是在subscript實現部分,又十分相似於計算屬性,其須要實現一個get塊和可選實現一個set塊,get塊用於使用下標取值,set塊用於使用下標設置值,所以,subscript結構更像是計算屬性和方法的混合體,示例以下:blog
class MyClass { var array=[1,1,1,1,1] subscript(param1:Int)->Int{ set{ array[param1] = newValue } get{ return array[param1] } } } var obj = MyClass() obj[0] = 3
開發者能夠只編寫get塊來實現只讀的下標訪問。對於多維下標的訪問方式,只需修改subscript中的參數個數便可,示例以下:ip
class MyClass { var array=[1,1,1,1,1] subscript(param1:Int,param2:Int)->Int{ set{ array[param1] = newValue } get{ return array[param1] } } } var obj = MyClass() obj[0,1] = 3
Swift中的下標能夠自定參數個數和參數類型,返回數據的類型開發者也能夠進行自定義。可是有一點須要注意,下標的參數不能設置默認值,也不能設置爲in-out類型。多維下標經常使用語行列數據的訪問,示例以下:開發
class SectionAndRow { var array:Array<Array<Int>> = [ [1,2] ,[3,4] ,[5,6] ,[7,8] ] subscript(section:Int,row:Int)->Int{ get{ let temp = array[section] return temp[row] } } } var data = SectionAndRow() //經過二維下標取值 data[1,1]
專一技術,熱愛生活,交流技術,也作朋友。get
——琿少 QQ羣:203317592博客