Programming/Swift

[Swift] 문법 다시보기 - 서브스크립트 (subscript)

devssun 2021. 10. 15. 23:25
728x90
반응형

야곰 스위프트 프로그래밍 책을 읽으며 기억해둘 문법을 정리합니다.


서브스크립트 (subscript)

  • 클래스, 구조체, 열거형에서 컬렉션, 리스트, 시퀀스 등 타입의 요소에 접근하는 단축 문법
  • 별도의 설정자 또는 접근자 등의 메서드를 구현하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있음
  • 여러개의 서브스크립트를 구현할 수 있고 외부에서 사용할 때는 전달한 값의 타입을 유추하여 적절한 서브스크립트를 선택하여 실행 (→ 서브스크립트 중복 정의)
  • 타입에 따라 여러 매개변수를 가질 수 있음, 입출력 매개변수는 가질 수 없음

문법

  • 인스턴스 이름 뒤에 대괄호로 감싼 값을 써서 인스턴스 내부의 특정 값에 접근
  • subscript 키워드를 사용하여 정의
subscript(index: Int) -> Int {
    get {
        // 적절한 서브스크립트 결괏값 반환
    }
    set {
        // 적절한 설정자 역할 수행
    }
}
  • 예제 1

      // 예제 1
    
      struct Student {
          var name: String
          var number: Int
      }
    
      class School {
    
          var number: Int = 0
          var students: [Student] = [Student]()
    
          func addStudent(name: String) {
              let student = Student(name: name, number: self.number)
              self.students.append(student)
              self.number += 1
          }
    
          func addStudents(names: String...) {
              for name in names {
                  self.addStudent(name: name)
              }
          }
    
          subscript(index: Int = 0) -> Student? {
              if index < self.number {
                  return self.students[index]
              }
              return nil
          }
      }
    
      let highSchool = School()
      highSchool.addStudents(names: "Mijeong", "juhyun", "jiyoung", "seonguk", "moonduk")
    
      let aStudent: Student? = highSchool[1]
      print("\(aStudent?.number) \(aStudent?.name)")  // Optional(1) Optional("juhyun")
      print(highSchool[]?.name) // Optional("Mijeong")

타입

  • 타입 자체에서 사용할 수 있는 서브스크립트, static 키워드를 붙인다, 클래스의 경우 class 키워드를 사용할 수도 있다
반응형