Swift2.0語言教程之下標腳本

Swift2.0語言教程之下標腳本

下標腳本

下標腳本是訪問對象、集合或者序列的快速方式。開發者不須要調用實例特定的賦值和訪問方法,就能夠直接訪問所須要的數值。例如在數組中,能夠直接使用下標去訪問或者修改數組中的某一個元素。代碼以下:數組

  • import Foundationspa

  • var array=["One","Two","Three","Four","Five"]orm

  • print("訪問元素:\(array[2])")對象

  • array[2]="Third"教程

  • print("訪問修改後的元素:\(array[2])")ip

運行結果以下:開發

  • 訪問元素:Three字符串

  • 訪問修改後的元素:Thirdget

Swift中,下標腳本也能夠定義在類中。這樣,開發者就能夠像數組同樣,快速訪問類中的屬性。本節將主要講解類中如何使用下標腳本。it

定義下標腳本

下標腳本經過subscript關鍵字進行定義,其定義形式以下:

  • subscript(數名稱1:數據類型,參數名稱2:數據類型,) ->返回值的數據類型 {

  •     get {

  •       // 返回與參數類型匹配的類型的值

  •     }

  •     set(參數名稱) {

  •       // 執行賦值操做

  •     }

  • }

注意:set參數名稱必須和下標腳本定義的返回值類型相同,因此不爲它指定數據類型。與計算屬性相同,set後面若是沒有聲明參數,那麼就使用默認的newValue

【示例8-18】如下將在類中定義一個下標腳本,實現經過下標腳本獲取某一屬性的值。代碼以下:

  • class NewClass{

  •    var english:Int=0

  •     var chinese:Int=0

  • var math:Int=0

  • //定義下標腳本

  •     subscript(index:Int)->Int{

  •         get{

  •             switch index{

  •                 case 0:

  •                     return english

  •                 case 1:

  •                     return chinese

  •                 case 2:

  •                     return math

  •                 default:

  •                     return 0

  •             }

  •         }

  •         set{

  •           english=newValue

  •             chinese=newValue

  •            math=newValue

  •         }

  •     }

  • }

調用下標腳本

定義下標腳本後,就能夠進行調用了,其調用形式以下:

  • 實例對象[參數1,參數2,]

其中,[]和它裏面的內容就表明了在類中定義的下標腳本。

使用下標腳本

下標腳本能夠根據傳入參數的不一樣,分爲具備一個入參參數的下標腳本和具備多個入參參數的下標腳本。如下就是對這兩個下標腳本在類中的使用。

1.具備一個傳入參數的下標腳本

具備一個入參參數的下標腳本是最多見的。在集合以及字符串中使用的下標就是具備一個傳入參數的下標腳本。

【示例8-19】如下程序經過使用下標腳本計算3門成績的和。代碼以下:

  • import Foundation

  • class Score{

  •     var english:Int=0

  •     var chinese:Int=0

  • var math:Int=0

  • //定義下標腳本

  •     subscript(index:Int)->Int{

  •         get{

  •             switch index{

  •                 case 0:

  •                     return english

  •                 case 1:

  •                     return chinese

  •                 case 2:

  •                     return math

  •                 default:

  •                     return 0

  •             }

  •         }

  •         set{

  •           english=newValue

  •             chinese=newValue

  •            math=newValue

  •         }

  •     }

  • }

  • var myscore=Score()

  • var sum:Int=0

  • var i:Int=0

  • //遍歷

  • for i=0;i<3;++i{

  •     sum+=myscore[i]

  • }

  • print(sum)

  • //修改屬性值

  • myscore[0]=100

  • myscore[1]=90

  • myscore[2]=80

  • //遍歷求和

  • for i=0;i<3;++i{

  •     sum+=myscore[i]

  • }

  • print(sum)

運行結果以下所示:

  • 0

  • 240                                       

注意:下標腳本能夠和計算屬性同樣設置爲讀寫或只讀。以上的代碼是讀寫的形式。只讀的通常語法形式以下:

  • subscript(參數名稱:數據類型) -> Int {

  •     get{

  •    //返回與參數匹配的Int類型的值

  • }

  • }

  • 能夠簡寫爲如下的形式:

  • subscript(參數名稱:數據類型) -> Int {

  •     // 返回與參數匹配的Int類型的值

  • }

【示例8-20】如下就使用只讀的形式實現使用下標訪問屬性值的功能。代碼以下:

  • import Foundation

  • class Score{

  •     var english:Int=50

  •     var chinese:Int=100

  • var math:Int=30

  • //定義下標腳本

  •     subscript(index:Int)->Int{

  •             switch index{

  •                 case 0:

  •                     return english

  •                 case 1:

  •                     return chinese

  •                 case 2:

  •                     return math

  •                 default:

  •                     return 0

  •             }

  •     }

  • }

  • var myscore=Score()

  • var sum:Int=0

  • var i:Int=0

  • //遍歷輸出屬性值

  • for i=0;i<3;++i{

  •    print(myscore[i])

  • }

運行結果以下所示:

  • 50

  • 100

  • 30

2.具備多個參數的下標腳本

具備一個入參參數的下標腳本通常使用在多維維數組中。如下就是使用具備兩個參數的下標爲二維數組賦值。代碼以下:

  • import Foundation

  • var value:Int=0

  • class NewClass{

  •     var rows: Int = 0, columns: Int=0

  • var grid: [Double]

  • //初始化方法

  •     init(rows: Int, columns: Int) {

  •         self.rows = rows

  •         self.columns = columns

  •         grid = Array(count: rows * columns, repeatedValue: 0.0)

  • }

  •     func indexIsValidForRow(row: Int, column: Int) -> Bool {

  •         return row >= 0 && row < rows && column >= 0 && column < columns

  • }

  • //下標腳本

  •     subscript(row: Int, column: Int) -> Double {

  •         get {

  •             assert(indexIsValidForRow(row, column: column), "Index out of range")

  •             return grid[(row * columns) + column]

  •         }

  •         set {

  •             assert(indexIsValidForRow(row, column: column), "Index out of range")

  •             grid[(row * columns) + column] = newValue

  •         }

  •     }

  • }

  • var matrix = NewClass(rows: 2, columns: 2)

  • print("沒有賦值前")

  • print(matrix[0,0])

  • print(matrix[0,1])

  • print(matrix[1,0])

  • print(matrix[1,1])

  • print("賦值後")

  • matrix[0,0]=1.0

  • matrix[0,1]=5.6

  • matrix[1,0]=2.4

  • matrix[1,1]=3.2

  • print(matrix[0,0])

  • print(matrix[0,1])

  • print(matrix[1,0])

  • print(matrix[1,1])

運行結果以下所示:

  • 沒有賦值前

  • 0.0

  • 0.0

  • 0.0

  • 0.0

賦值後

  • 1.0

  • 5.6

  • 2.4

  • 3.2

固然,下標腳本除了能夠對訪問對象以及對象中的屬性外,還能夠實現一些自定義的功能,如如下的代碼,此代碼實現的功能是計算下標值和10的乘積。代碼以下:

  • import Foundation

  • class NewClass{

  • var count1: Int=10

  • //定義下標腳本

  •     subscript(index:Int) -> Int {

  •         get {

  •                           var count=index*count1

  •                          return count

  •         }

  •         set(newvalue){

  •               //執行賦值操做

  •                      count1=newvalue

  •         }

  •     }

  • }

  • let newClass=NewClass()

  • print(newClass.count1)

  • print(newClass[6])

運行結果以下:

  • 10

  • 60

本文選自:Swift2.0語言快速入門v3.0 大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!

相關文章
相關標籤/搜索