最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Swift編程中下標(biāo)的用法

 更新時(shí)間:2015年11月05日 14:56:00   投稿:goldensun  
這篇文章主要介紹了Swift編程中下標(biāo)的用法,是Swift入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

訪(fǎng)問(wèn)一個(gè)集合的元素成員,在類(lèi)中的序列和列表,結(jié)構(gòu)和枚舉都可以使用下標(biāo)。這些下標(biāo)用于存儲(chǔ)和使用索引來(lái)檢索值。數(shù)組元素可使用如:someArray[index],在 Dictionary 實(shí)例及其后續(xù)成員元素的訪(fǎng)問(wèn)也可以使用如:someDicitonary[key]。

對(duì)于單一類(lèi)型,下標(biāo)范圍可以從單一到多個(gè)聲明。我們可以用適當(dāng)?shù)南聵?biāo)重載傳遞給下標(biāo)索引值的類(lèi)型。下標(biāo)也可以根據(jù)輸入數(shù)據(jù)類(lèi)型聲明范圍從單一維度到多維度。

下標(biāo)聲明語(yǔ)法和用法
讓我們回顧一下計(jì)算屬性。下標(biāo)也遵循計(jì)算屬性相同的語(yǔ)法。對(duì)于查詢(xún)類(lèi)型的實(shí)例下標(biāo)括在方括號(hào)內(nèi),接著是實(shí)例名稱(chēng)。下標(biāo)語(yǔ)法遵循結(jié)構(gòu)作為 “實(shí)例方法” 和 “計(jì)算屬性” 相同的語(yǔ)法?!皊ubscript” 關(guān)鍵字用來(lái)定義標(biāo),用戶(hù)可以指定一個(gè)或多個(gè)參數(shù),它們帶有返回類(lèi)型。下標(biāo)可以有讀寫(xiě)或只讀屬性和實(shí)例存儲(chǔ)和檢索使用 “getter” 和 “setter” 屬性作為計(jì)算屬性。

語(yǔ)法

復(fù)制代碼 代碼如下:

subscript(index:Int)->Int{get{// used for subscript value declarations}set(newValue){// definitions are written here}}

示例1
復(fù)制代碼 代碼如下:

struct subexample {let decrementer:Int
    subscript(index:Int)->Int{return decrementer / index
    }}let division = subexample(decrementer:100)

println("The number is divisible by \(division[9]) times")
println("The number is divisible by \(division[2]) times")
println("The number is divisible by \(division[3]) times")
println("The number is divisible by \(division[5]) times")
println("The number is divisible by \(division[7]) times")


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果

The number is divisible by 11 times
The number is divisible by 50 times
The number is divisible by 33 times
The number is divisible by 20 times
The number is divisible by 14 times

示例2

復(fù)制代碼 代碼如下:

class daysofaweek {privatevar days =["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","saturday"]
    subscript(index:Int)->String{get{return days[index]}set(newValue){self.days[index]= newValue
        }}}var p = daysofaweek()

println(p[0])
println(p[1])
println(p[2])
println(p[3])


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果

Sunday
Monday
Tuesday
Wednesday

下標(biāo)選項(xiàng)
下標(biāo)采用單一到多元的輸入?yún)?shù),這些輸入?yún)?shù)也屬于任意數(shù)據(jù)類(lèi)型。還可以使用變量,可變參數(shù)的參數(shù)。下標(biāo)不能提供缺省參數(shù)值,或使用任何 in-out 參數(shù)。

定義多個(gè)標(biāo)被稱(chēng)為“下標(biāo)重載'在一個(gè)類(lèi) 或結(jié)構(gòu)體根據(jù)需要可以提供多個(gè)下標(biāo)定義。這些多個(gè)標(biāo)是基于被下標(biāo)括號(hào)內(nèi)聲明值的類(lèi)型推斷。

復(fù)制代碼 代碼如下:

structMatrix{let rows:Int, columns:Intvarprint:[Double]
    init(rows:Int, columns:Int){self.rows = rows
        self.columns = columns
        print=Array(count: rows * columns, repeatedValue:0.0)}
    subscript(row:Int, column:Int)->Double{get{returnprint[(row * columns)+ column]}set{print[(row * columns)+ column]= newValue
        }}}var mat =Matrix(rows:3, columns:3)

mat[0,0]=1.0
mat[0,1]=2.0
mat[1,0]=3.0
mat[1,1]=5.0

println("\(mat[0,0])")
println("\(mat[0,1])")
println("\(mat[1,0])")
println("\(mat[1,1])")


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果

1.0
2.0
3.0
5.0

Swift 下標(biāo)支持單參數(shù)到多參數(shù)聲明相應(yīng)數(shù)據(jù)類(lèi)型。該程序聲明的“矩陣”結(jié)構(gòu)為2*2維數(shù)組矩陣來(lái)存儲(chǔ) “Double” 數(shù)據(jù)類(lèi)型。 矩陣參數(shù)被輸入整數(shù)數(shù)據(jù)類(lèi)型用來(lái)聲明行和列。

矩陣新實(shí)例是通過(guò)使行和列數(shù)來(lái)初始化創(chuàng)建的,如下所示。

復(fù)制代碼 代碼如下:

 var mat = Matrix(rows: 3, columns: 3)

矩陣值可通過(guò)傳遞行和列值到下標(biāo),通過(guò)逗號(hào)隔開(kāi),進(jìn)行定義如下所示。

復(fù)制代碼 代碼如下:

mat[0,0] = 1.0 
mat[0,1] = 2.0
mat[1,0] = 3.0
mat[1,1] = 5.0


下標(biāo)方法的定義
下標(biāo)方法的定義語(yǔ)法與實(shí)例方法和計(jì)算屬性的語(yǔ)法類(lèi)似。
       下標(biāo)方法使用subscript關(guān)鍵字來(lái)指示是一個(gè)下標(biāo)方法。與實(shí)例方法一樣,下標(biāo)方法定義中可以規(guī)定一個(gè)或多個(gè)輸入?yún)?shù),并帶有一個(gè)返回類(lèi)型。與實(shí)例方法不同的是下標(biāo)方法可以是可讀寫(xiě)的或是只讀的。與計(jì)算屬性的定義一樣,下標(biāo)方法通過(guò)使用getter和setter來(lái)傳達(dá)下標(biāo)方法的行為。如果在下標(biāo)方法的定義中g(shù)etter和setter都被指定,則定義了一個(gè)可讀寫(xiě)的下標(biāo)方法,如果下標(biāo)方法的定義中不包含setter,則定義了一個(gè)只讀的下標(biāo)方法,并且這時(shí)代表getter方法的關(guān)鍵字get也可以省略。下標(biāo)方法定義的完整語(yǔ)法如下:

復(fù)制代碼 代碼如下:

subscript(index:Int) ->Int {
   get {
       // return an appropriate subscript value here
    }
   set(newValue) {
       // perform a suitable setting action here
    }
}
     該例定義了一個(gè)可讀寫(xiě)的下標(biāo)方法,newValue可以指定,也可以不指定,不指定時(shí)使用默認(rèn)的參數(shù)名newValue。
     如下例子展示了一個(gè)只讀下標(biāo)方法的定義和使用。由于只讀下標(biāo)方法只指定一個(gè)getter,意義是明確的,因此可以省略get關(guān)鍵字。
struct TimesTable {
   let multiplier:Int
   subscript(index:Int) ->Int {
       return multiplier *index
    }
}
let threeTimesTable =TimesTable(multiplier:3)
println("six times three is\(threeTimesTable[6])")
// prints "six times three is 18”

下標(biāo)方法的使用 
        你能為一個(gè)類(lèi)型定義和實(shí)現(xiàn)多個(gè)下標(biāo)方法,編譯器基于你傳送給下標(biāo)方法的索引參數(shù)的類(lèi)型來(lái)推斷和選擇適當(dāng)?shù)南聵?biāo)方法。
        與方法類(lèi)似,下標(biāo)方法可以包含任意數(shù)量的輸入?yún)?shù),且這些輸入?yún)?shù)的類(lèi)型可以是任何類(lèi)型,下標(biāo)方法也能返回任何類(lèi)型。下標(biāo)方法也能使用可變參數(shù),但不能使用in-out參數(shù)也不能通過(guò)默認(rèn)參數(shù)值。
                  如可以定義一個(gè)帶有多個(gè)輸入?yún)?shù)的表示多緯度的下標(biāo)方法,下面的例子展示了如何為一個(gè)矩陣結(jié)構(gòu)定義一個(gè)帶兩個(gè)整數(shù)類(lèi)型的下標(biāo)方法以及如何使用,定義的下標(biāo)方法用來(lái)索引矩陣中定義的兩緯度的元素。
復(fù)制代碼 代碼如下:

struct Matrix {
   let rows:Int,columns:Int
   var grid:Double[]
   init(rows:Int,columns:Int) {
       self.rows =rows
       self.columns =columns
       grid =Array(count:rows *columns,repeatedValue:0.0)
    }
 subscript(row:Int,column:Int) ->Double {
       get {
        
           return grid[(row *columns) +column]
        }
       set {
      
           grid[(row *columns) +column] =newValue
        }
    }
}
    
 var matrix =Matrix(rows:2,columns:2)
matrix[0,1] =1.5
matrix[1,0] =3.2

相關(guān)文章

最新評(píng)論

台州市| 云林县| 射阳县| 黄大仙区| 威远县| 永年县| 米林县| 天津市| 仁化县| 汝阳县| 莱州市| 青浦区| 教育| 大理市| 郓城县| 友谊县| 乌拉特中旗| 霞浦县| 嘉义市| 左云县| 都兰县| 长海县| 宁远县| 营口市| 红原县| 东乡| 开封县| 福泉市| 当阳市| 合水县| 河西区| 铅山县| 睢宁县| 东海县| 锡林郭勒盟| 香河县| 休宁县| 清流县| 巨鹿县| 屏东县| 洛阳市|