Swift中的Array,Dictionary類型可以通過(guò)下標(biāo)或者鍵值的方式來(lái)進(jìn)行數(shù)據(jù)的訪問(wèn),實(shí)際上在Swift的語(yǔ)法中,下標(biāo)可以定義在類、結(jié)構(gòu)體、枚舉中。開(kāi)發(fā)者可以通過(guò)下標(biāo)的方式來(lái)對(duì)屬性進(jìn)行訪問(wèn)而不用使用專門的存取方法。并且定義的下標(biāo)不限于一維,開(kāi)發(fā)者可以定義多維的下標(biāo)來(lái)滿足需求。
下標(biāo)的語(yǔ)法結(jié)構(gòu)
下標(biāo)使用subscript來(lái)定義,其有些類似于方法,參數(shù)和返回值本別作為下標(biāo)入?yún)⒑屯ㄟ^(guò)下標(biāo)所取的值。但是在subscript實(shí)現(xiàn)部分,又十分類似于計(jì)算屬性,其需要實(shí)現(xiàn)一個(gè)get塊和可選實(shí)現(xiàn)一個(gè)set塊,get塊用于使用下標(biāo)取值,set塊用于使用下標(biāo)設(shè)置值,因此,subscript結(jié)構(gòu)更像是計(jì)算屬性和方法的混合體,示例如下:
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] = 3class 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下標(biāo)的特性
Swift中的下標(biāo)可以自定參數(shù)個(gè)數(shù)和參數(shù)類型,返回?cái)?shù)據(jù)的類型開(kāi)發(fā)者也可以進(jìn)行自定義。但是有一點(diǎn)需要注意,下標(biāo)的參數(shù)不能設(shè)置默認(rèn)值,也不能設(shè)置為in-out類型。多維下標(biāo)常用語(yǔ)行列數(shù)據(jù)的訪問(wèn),示例如下:
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()//通過(guò)二維下標(biāo)取值data[1,1]新聞熱點(diǎn)
疑難解答
圖片精選