본문 바로가기
iOS/Swift

Swift) Subscript

by Jiseong 2022. 2. 13.

Subscript

정의: 클래스, 구조체, 열거형에서 시퀀스의 멤버 요소에 접근하기 위한 바로가기 첨자로, 단일 타입에 여러 서브스크립트를 정의할 수 있다.

시퀀스 요소에 접근하기 위한 바로가기 첨자는 어찌 이해는 하겄는데 단일 타입에 여러 서브 스크립트.. 뭐 이니셜라이저 여러개 쓰는 것처럼 쓸 수 있다 이 말인가?

 

근데 의외로 간단하더라

 

우린 항상 Subscript를 사용해왔다.

위 코드는 Array의 서브 스크립트인데, 이걸 어떻게 사용해 왔느냐면은

let city: [String] = ["Seoul", "Bucheon", "Busan", "Incheon"]
print(city[1]) // 서브 스크립트 ( '[]' )

파라미터로 인덱스(Int)를 받아 배열의 요소를 반환하는 형태이다.

 

딕셔너리도 있다.

얘는.. 딕셔너리에 키를 넣으면 값이 튀어나오는데, 그 형태이다.

 

예를 들면..

let housePriceOfCity: [String: Int] = ["Seoul" : 30, "Bucheon" : 5, "Busan" : 5, "Incheon" : 10]
print(housePriceOfCity["Seoul"] // 30 

난 서울 안살란다

Subscript 정의

  • 파라미터와 리턴값을 생략할 수 없고 필수적으로 해야한다.
  • getter, setter 구현 가능
  • read-only, read-write 가능 write-only 불가능

연산프로퍼티랑 비슷하다.

 

gettersetter는.. 간단하게 설명하자면 해당 변수의 값을 불러와서 쓸 때는 getter, 변수에 값을 할당할 때는 setter

예제

struct HousePrice {
    var HousePriceOfCity = ["Seoul" : 30, "Bucheon" : 5, "Busan" : 5, "Incheon" : 10]
    
    subscript(key: String) -> Int? {
        get {
            return HousePriceOfCity[key]
        }
        set {
            HousePriceOfCity[key] = newValue
        }
    }
}

var housePrice = HousePrice()

housePrice.HousePriceOfCity["Bucheon"] // 5 (getter)
housePrice.HousePriceOfCity["Seoul"] = 40 // (setter)
housePrice.HousePriceOfCity["Seoul"] // 40

서울 집값이 더 올랐댄다 미친

댓글