서브스크립트

홍석현·2022년 8월 11일
0
post-thumbnail

클래스, 구조체, 열거형에는 컬렉션, 리스트, 시퀀스 등의 타입의 요소에 접근하는 단축 문법인 서브스크립트를 정의할 수 있습니다. 서브스크립트는 변도의 설정자 또는 접근자 등의 메서드를 구현하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있습니다.

서브스크립트 문법

subscript (index: Int) -> Int {
    get {
        // 적절한 서브스크립트 결과값 반환
    }
    set(newValue) {
        // 적절한 설정자 역할 수행 
    }
}

물론 읽기 전용만 구현 하는 것도 가능합니다.

서브스크립트 구현

클래스와 구조체는 서브스크립트를 원하는 만큼 구현할 수 있습니다. 서브스크립트에 전달한 값의 타입을 유추하여 적절한 서브스크립트를 선택하여 실행합니다. 이를 서브 스크립트 중복 정의 Subscript Overloading이라고 합니다.

서브스크립트는 통상 하나의 매개변수를 갖지만, 타입에 따라 여러 매개변수를 갖는 경우도 있습니다. 단, 입출력 매개변수(in-out parameter)는 가질 수 없습니다.

struct Student {
    var name: String
    var number: Int
}

class School {
    
    var number = 0
    var students = [Student]()
    
    func addStudent(_ names: String...) {
        for name in names {
            let newStudent = Student(name: name, number: self.number)
            students.append(newStudent)
            self.number += 1
        }
    }
    
    subscript(index: Int = 0) -> Student? {
        if index < self.number {
            return students[index]
        }
        return nil
    }
}

let highSchool = School()

highSchool.addStudent("피터", "종권", "증권", "허브", "계란")

print(highSchool[2]) // 증권

복수 서브스크립트

하나의 타입이 여러 개의 서브스크립트를 가질 수 있습니다.

타입 서브스크립트

이전까지 서브스크립트는 인스튼스에서 사용할 수 있는 서브스크립트입니다. 타입 서브스크립트는 인스턴스가 아니라 타입 자체에서 사용할 수 있는 서브스크립트입니다. 타입 서브스크립트를 구현하려면 서브스크립트를 정의할 때 subscript 키워트 앞에 static 키워드를 붙여주면 됩니다. 클래스의 경우에는 class 키워드를 사용할 수도 있습니다.

자료 출처: 야곰 스위프트 프로그래밍 3판

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
profile
iOS 개발자입니다.

0개의 댓글