본문 바로가기
IOS/Swift

[Swift] 서브 스크립트(Subscripts)

by 얘리밍 2023. 2. 13.
320x100
728x90

 

 

📌 서브 스크립트(Subscripts)

 

 

클래스. 구조체, 열거형이 collection, list, sequence의 멤버 요소에 접근할 수 있는 단축키이다. 

별도의 메소드 없이 인덱스로 값을 설정하고 조회하기 위해 서브스크립트 사용

 

someArray[index] -> Array 인스턴스 요소에 접근

someDictionary[key] -> Dictionary 인스턴스에 접근

 

 

 

 

1️⃣ 서브 스크립트 구문

 

 

인스턴스 이름 뒤 대괄호에 하나 이상의 값을 작성하여 타입의 인스턴스를 조회 가능하다. 

읽기-쓰기 혹은 읽기 전용이 될 수 있음

 

gettersetter를 통해 동작

 

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

 

 

정수의 n-배-테이블을 표시하기 위한 TimesTable 구조체이다. 

인덱스가 하나 증가할수록, n배 곱한 값을 반환한다. 

 

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}

 

 

사용해보자. 3배 테이블을 생성하기 위한 threeTimesTable 상수에 인스턴스를 생성한다. 

6번째 인덱스에는 3 * 6 = 18 값이 들어 있다. 

 

let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// Prints "six times three is 18"

 

 


 

 

2️⃣ 서브 스크립트 옵션

 

 

  • 여러개의 입력 파라미터 가질 수 있음
  • 입력 파라미터는 어떤 타입이든 가능
  • 또한 어떤 타입도 반환 가능 

 

 

 

✅ 타입 서브 스크립트 

 

 

타입 메서드와 동일하게 subscript 앞에 static 키워드 혹은 클래스 일 때는 class 키워드와 함께 사용 가능하다. 

enum Planet: Int {
    case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
    static subscript(n: Int) -> Planet {
        return Planet(rawValue: n)!
    }
}

 

 

let mars = Planet[4]
print(mars)
//mars 출력

 

728x90
반응형