《從零開始學Swift》學習筆記(Day 35)——會使用下標嗎?

智捷關東昇發表於2016-03-18

原創文章,歡迎轉載。轉載請註明:關東昇的部落格
  看下面的示例程式碼是不是使用過:

var studentList: String[]  = ["張三","李四","王五"]
studentList[0] = "諸葛亮"

var studentDictionary = [102: "張三",105: "李四", 109: "王五"]

studentDictionary[110] = "董六"

  在訪問陣列和字典的時候,可以採用下標訪問。其中陣列的下標是整數型別索引,字典的下標是它的“鍵”。

下標
  Swift中的下標相當於Java中的索引屬性和C#中的索引器。
下標訪問的語法格式如下:

物件導向型別 型別名 { 
        其他屬性
    ...    
        subscript(引數: 引數資料型別) -> 返回值資料型別 {    
        get {        
            return 返回值
        }            

        set(新屬性值) {
        ...
        }                    
        }                        

}

  下標也有類似於計算屬性的getter和setter訪問器。
  getter訪問器是一個方法,在最後使用return語句將計算結果返回。
  setter訪問器“新屬性值”是要賦值給屬性值。引數的宣告可以省略,系統會分配一個預設的引數ewValue。

示例:二維陣列
  在Swift中沒有提供二維陣列,只有一維陣列Array。可以自定義一個二維陣列型別,然後通過兩個下標引數訪問它的元素,形式上類似於C語言的二維陣列。
採用下標的二維陣列示例程式碼如下:

struct DoubleDimensionalArray {    //定義了二維陣列結構體

    let rows: Int, columns: Int        //儲存屬性rows和columns
    var grid: [Int]

    init(rows: Int, columns: Int) {    //建構函式
    self.rows = rows
    self.columns = columns
    grid = Array(count: rows * columns, repeatedValue: 0)    //初始化儲存屬性grid
    }

    subscript(row: Int, col: Int) -> Int {    //定義下標

    get {
        return grid[(row * columns) + col]    
    }

    set (newValue1){
        grid[(row * columns) + col] = newValue1        
    }
    }

}

var ary2 = DoubleDimensionalArray(rows: 10, columns: 10)    //建立並初始化10×10大小的二維陣列

//初始化二維陣列
for var i = 0; i < 10; i++ {
    for var j = 0; j < 10; j++ {
    ary2[i,j] = i * j            

    }
}

//列印輸出二維陣列
for var i = 0; i < 10; i++ {
    for var j = 0; j < 10; j++ {
    print("\t \(ary2[i,j])")
    }
    print("\n")
}

輸出結果如下:
  0 0 0 0 0 0 0 0 0 0
  0 1 2 3 4 5 6 7 8 9
  0 2 4 6 8 10 12 14 16 18
  0 3 6 9 12 15 18 21 24 27
  0 4 8 12 16 20 24 28 32 36
  0 5 10 15 20 25 30 35 40 45
  0 6 12 18 24 30 36 42 48 54
  0 7 14 21 28 35 42 49 56 63
  0 8 16 24 32 40 48 56 64 72
  0 9 18 27 36 45 54 63 72 81

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章