[Swift] Subscripts

Lena·2020년 12월 15일
0
post-custom-banner

Subscripts

Classes, structures, and enumerations can define subscripts, which are shortcuts for accessing the member elements of a collection, list, or sequence.

클래스, 구조체, 열거형에서 subscripts를 정의할 수 있다. subscripts를 이용해서 collection, list or sequence의 elements에 접근할 수 있다.

subscript를 정의한 인스턴스 뒤에 대괄호를 붙여서 값을 가져오거나(retrieve) 저장(set)할 수 있다.

예를 들면, Array와 Dictionary에 정의된 subscript를 이용해 Array[index], Dictionary[key]와 같이 element에 접근할 수 있다.

subscript를 여러 개 정의할 수 있고, overload도 가능하다. subscripts는 read-write 또는 read-only만 가능하다.

Subscript Syntax

Their syntax is similar to both instance method syntax and computed property syntax.
subscript 키워드를 사용해서 method와 computed property와 유사하게 정의한다.

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

Subscript Usage

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

Subscript Options

Like functions, subscripts can take a varying number of parameters and provide default values for their parameters, as discussed in Variadic Parameters and Default Parameter Values. However, unlike functions, subscripts can’t use in-out parameters.

subscript는 여러 개의 파라미터를 받을 수 있고, 파라미터에 기본 값을 줄 수도 있다. 하지만, in-out 파라미터를 사용할 수는 없다.

Type Subscripts

type 자체로 call 할 수 있는 type subscript를 정의할 수 있다. static 키워드를 붙여서 나타낼 수 있고, class의 경우에는 class 키워드를 대신 사용해서 subclass로부터 override 가능하도록 정의할 수도 있다.

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)

Reference

https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html

post-custom-banner

0개의 댓글