๋ฐ์ํ
์๋ธ์คํฌ๋ฆฝํธ(Subscripts)
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ๊ทธ๋ฆฌ๊ณ ์ด๊ฑฐํ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํด ์ฌ์ฉ ๊ฐ๋ฅ
- ์ฝ๋ ์ , ๋ฆฌ์คํธ, ์ํ์ค ๋ฑ ์งํฉ์ ํน์ ๋ฉค๋ฒ ์๋ฆฌ๋จผํธ์ ๊ฐ๋จํ๊ฒ ์ ๊ทผ ํ ์ ์๋ ๋ฌธ๋ฒ
- ์ถ๊ฐ์ ์ธ ๋ฉ์๋ ์์ด ํน์ ๊ฐ์ ํ ๋นํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ์ ์์
- ํ๋์ ํ์ ์ ์ฌ๋ฌ ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํ ์ ์๊ณ ์ค๋ฒ๋ก๋(Overload)๋ ๊ฐ๋ฅ
- ๋จ์ผ ์ธ์ ๊ฐ์ ๋์ด, ํ์์ ๋ฐ๋ผ ๋ณต์ ์ธ์ ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ (Subscript Syntax)
- ์๋ธ์คํฌ๋ฆฝํธ๋ ์ฝ๊ณ -์ฐ๊ธฐ(read-write) ํน์ ์ฝ๊ธฐ ์ ์ฉ(read only)๋ง ๊ฐ๋ฅ
- setter, getter ๋ฐฉ์์ ๋ฐ๋ฆ
subscript(index: Int) -> Int {
get {
// ์ ์ ํ ๋ฐํ ๊ฐ
}
set(newValue) {
// ์ ์ ํ set ์ก์
}
}
- set์ ๋ํ ์ธ์ ๊ฐ์ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก newValue๋ฅผ ์ฌ์ฉ
- get, set์ ์ง์ฐ๊ณ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด get์ผ๋ก ๋์ํด ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ ์ธ
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \\(threeTimesTable[6])")
// "six times three is 18" ์ถ๋ ฅ
์๋ธ์คํฌ๋ฆฝํธ ์ฌ์ฉ (Subscript Usage)
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4, nil: 3]
print(numberOfLegs)
// [Optional("cat"): 4, nil: 3, Optional("spider"): 8, Optional("ant"): 6]
์๋ธ์คํฌ๋ฆฝํธ ์ต์ (Subscript Options)
- ์ ๋ ฅ ์ธ์์ ์ซ์์ ์ ํ์ด ์์, ์ ๋ ฅ ์ธ์์ ํ์ ๊ณผ ๋ฐํ ํ์ ์ ์ ํ๋ ์์
- in-out ์ธ์๋ ๊ธฐ๋ณธ ์ธ์ ๊ฐ์ ์ ๊ณตํ ์ ์์
- ์ค๋ฒ๋ก๋ฉ ํ์ฉ → ์ธ์ํ, ๋ฐํํ์ ๋ฐ๋ผ ์ํ๋ ์ ๋งํผ ์๋ธ์คํฌ๋ฆฝํธ ์ ์ธ ๊ฐ๋ฅ
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
}
}
}
var matrix = Matrix(rows: 2, columns: 2)
let someValue = matrix[2, 2]
// [2, 2]๊ฐ ์ฌ์ฉํ ์ ์๋ ํ๋ ฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก assert๊ฐ ์คํ๋ฉ๋๋ค.
๋ฐ์ํ
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ด๊ธฐํ (1) | 2024.03.25 |
---|---|
[Swift] ์์ (0) | 2024.03.22 |
[Swift] ๋ฉ์๋ (0) | 2024.03.21 |
[Swift] ํ๋กํผํฐ (0) | 2024.03.20 |
[Swift] ํด๋์ค์ ๊ตฌ์กฐ์ฒด (0) | 2024.03.19 |