์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค!
์ค๋์ ํด์ฌ ํ ์ด๋ธ(๋์ ๋๋ฆฌ)์ ์ง์ ๊ตฌํํ๋ ์ค์ a["A"] ์ด๋ฐ ์์ผ๋ก ๊ฐ์ ์ง์ ํ๊ณ
๊ฐ์ ๊บผ๋ด์ค๋์ง ์ฐพ์๋ณด๋ ์ค์ subscript๋ฅผ ํ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ๊ธ์ ์ ๋ฆฌํ๊ฒ ๋์์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
Subscript
Swift ๊ณต์ ๋ฌธ์์๋ ์๋์ ๊ฐ์ด ์ ์๋์ด ์์ต๋๋ค!
ํด๋์ค, ๊ตฌ์กฐ์ฒด ๊ทธ๋ฆฌ๊ณ ์ด๊ฑฐํ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ธ์คํฌ๋ฆฝํธ๋ ์ฝ๋ ์ , ๋ฆฌ์คํธ, ์ํ์ค ๋ฑ ์งํฉ์ ํน์ ๋ฉค๋ฒ ์๋ฆฌ๋จผํธ์ ๊ฐ๋จํ๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฌธ๋ฒ์ ๋๋ค. ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ๋ฉด ์ถ๊ฐ์ ์ธ ๋ฉ์๋ ์์ด ํน์ ๊ฐ์ ํ ๋น(assign)ํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ์(retrieve) ์์ต๋๋ค. ์๋ฅผ๋ค๋ฉด, ๋ฐฐ์ด(Array) ์ธ์คํด์ค์ ํน์ ์๋ฆฌ๋จผํธ๋ someArray[index] ๋ฌธ๋ฒ์ผ๋ก, ์ฌ์ (Dictionary) ์ธ์คํด์ค์ ํน์ ์๋ฆฌ๋จผํธ๋ someDictionary[key]๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ํ๋์ ํ์ ์ ์ฌ๋ฌ ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํ ์ ์๊ณ ์ค๋ฒ๋ก๋(Overload)๋ ๊ฐ๋ฅํฉ๋๋ค. ๋ฟ๋ง์๋๋ผ ๋จ์ผ ์ธ์ ๊ฐ์ ๋์ด, ํ์ ๋ฐ๋ผ ๋ณต์ ์ธ์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฆ, ์ถ๊ฐ์ ์ธ ๋ฉ์๋ ์์ด ๊ฐ์ ํ ๋นํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฌธ๋ฒ์ ๋๋ค.
Syntax
์๋ธ์คํฌ๋ฆฝํธ ์ ์ธ ๋ฌธ๋ฒ์ ์ธ์คํด์ค ๋ฉ์๋์ ๊ณ์ฐ๋ ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
์ธ์คํด์ค ๋ฉ์๋์ ๋ค๋ฅธ ์ ์, ์๋ธ์คํฌ๋ฆฝํธ๋ ์ฝ๊ณ -์ฐ๊ธฐ(read-write) ํน์ ์ฝ๊ธฐ ์ ์ฉ(read only)๋ง ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค.
์ ์๋ ๊ณ์ฐ๋ ํ๋กํผํฐ ๋ฐฉ์๊ณผ ๊ฐ์ด setter, getter ๋ฐฉ์์ ๋ฐ๋ฆ ๋๋ค.
(๋ง์ฝ get,set์ ์ง์ ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ ์ธ๋ฉ๋๋ค.)
์๋์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ๋ก ํน์ ๊ฐ์ ๋ฐ๊ณ get์ ์ด์ฉํด์ ํน์ ๊ฐ์ ๋ฐํํ ์ ์๊ณ set์ ํตํด ํน์ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
subscript(index: Int) -> Int {
get {
// ์ ์ ํ ๋ฐํ ๊ฐ
}
set(newValue) {
// ์ ์ ํ set ์ก์
}
}
Usage
Read-Only
์๋์ ๊ฐ์ด ๊ณฑ์ ์ ํด์ฃผ๋ getter๋ฅผ ๋ง๋ค์ด์ ํน์ ๊ฐ์ ๋ฃ์์ ๋ ์ํ๋ ๊ฐ์ ๊ณฑํด์ฃผ์ด ๋ฐํํด์ค๋๋ค.
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" ์ถ๋ ฅ
Read & Write
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
}
}
}
'๐ Language > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RxCocoa] bind๋? (0) | 2021.07.05 |
---|---|
[Swift] defer๋? (0) | 2021.05.27 |
[Swift] ํด๋ก์ ธ๋ ์ ์ฐธ์กฐํ์ ์ผ๊น?(Why closure is reference type?) (0) | 2021.05.27 |
[Swift] Enum์ด๋?(feat. ์จ์ผํ๋ ์ด์ ) (0) | 2021.04.28 |
[RxSwift] Combining Observables ์์๋ณด๊ธฐ (Combine Latest,Zip, Merge,Concat,withLatestFrom) (0) | 2021.04.07 |
๋๊ธ