Swift學習筆記 | Subscript(自定義下標)

在swift中,class, structuresenum都可以定義subscript,subscript可以幫助我們更方便的訪問或者設置一個集合中的某個成員。

下面借助一個官網(wǎng)的實例可以幫助我們更清楚的明白這個功能。

struct Matrix {
    let rows: Int, columns: Int
    var grid: [Double]
    init(rows: Int, columns: Int) {
        self.rows = rows
        self.columns = columns
        grid = Array(repeating: 0.0, count: rows * columns)
    }
    func indexIsValid(row: Int, column: Int) -> Bool {
        return row >= 0 && row < rows && column >= 0 && column < columns
    }
    subscript(row: Int, column: Int) -> Double {
        get {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            return grid[(row * columns) + column]
        }
        set {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            grid[(row * columns) + column] = newValue
        }
    }
}

上面的代碼定義了一個結構體Matrix,我們通過設置row和column來初始化一個矩陣:

var matrix = Matrix(rows: 2, columns: 2)

但是在內部卻是用一個數(shù)組來存儲的,存儲結構就變成一維的了

grid = [0.0, 1.0, 2.0, 3.0]

我們要獲取第三個元素2.0就需要通過grid[2]來訪問了,假如我們還是想通過row與column來訪問grid中的數(shù)據(jù)呢?

這時候就是subscript登場的時候了。

我們通過定義subscript(row: Int, column: Int) -> Double來自動計算row與column實際上對應的是grid中的哪個值,grid用row與cloumn表示出來就是一個2*2的矩陣:

grid = [ 0,0, 1.0,
         2.0, 3.0]

row與column與grid中的下標對應的關系也就是: index = row*維度+column
這樣我們就可以用如下方式來設置或者獲取matrix中的元素值:

matrix[0, 1] = 1.5
matrix[1, 0] = 3.2

在這個例子中,我們還用了indexIsValid來判斷row與column是否在矩陣范圍內。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容