Subscript란?

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
        }
    }
}

Subscript Syntax

subscript(index: Int) -> Int {
		get {
				// Return an appropriate subscript value here.
		} 
		
		set(newValue) {
				// Perform a suitable setting action here.
		}
}

set에 대한 인자 값을 지정하지 않으면 default valuenewValue를 사용한다

get, set을 지우고 지정하지 않으면 read-only로 선언된다.

Usage

var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2

Subscript Options

Subscript는 여러 개의 입력 파라미터를 가질 수 있고 어떤 타입이든지 입력과 반환이 가능하다. 또한 오버로딩을 허용하여 인자형, 반환형에 따라 원하는 수 만큼의 subscript를 선언할 수 있다.

Type Subscripts