-
[Swift] 서브스크립트(subscript)iOS/Swift 2022. 8. 20. 23:45
서브스크립트
- 클래스, 구조체, 열거형 등의 타입의 요소에 접근하는 문법이다
- 별도의 설정자(setter)와 접근자(getter) 메서드를 구현하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있다
- 서브스크립트 중복정의: 여러 개 구현 O -> 값의 타입을 유추해서 적잘한 서브스크립트를 선택하여 실행한다
- 매개변수의 타입과 반환 타입에 제한이 없다
⭐️ subscript 키워드
- 읽고 쓰기
- 읽기 전용서브스크립트 정의 문법
// 읽고 쓰기 subscript(index: Int) -> Int { get { } set(newValue) { } } // 읽기 전용 subscript(index: Int) -> Int { }
예시 코드
// School 클래스 서브스크립트 구현 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 = 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? { //index는 0부터 시작하기 때문에 원소의 개수보다 클 수 없다! if index < self.number { return self.students[index] } return nil } } // 인스턴스 생성 let highSchool: School = School() // 인스턴스 사용 highSchool.addStudents(names: "Byeongkyu", "Yeonsu", "Star") let aStudent: Student? = highSchool[1] print(aStudent?.number) //Optional(1) print(aStudent?.name) //Optional("Yeonsu") Optional("Star") print(highSchool[]?.name) //매개변수 기본값 사용 Optional("Byeongkyu")
타입스크립트
인스턴스가 아니라 타입 자체에서 사용할 수 있는 서브스크립트이다
static subscript ~
// ============================================ // 타입 서브스크립트 // static 키워드를 통해 구현할 수 있다 enum aSchool: Int { case elementary = 1, middle, high, university static subscript(level: Int) -> aSchool? { return aSchool(rawValue: level) } } let school: aSchool? = aSchool[2] print(school) //Optional(iOS_study.aSchool.middle)
'iOS > Swift' 카테고리의 다른 글
[Swift] 타입캐스팅(type casting) (0) 2022.08.24 [Swift] 상속 (Inheritance) (0) 2022.08.22 [Swift] 모나드(Monad) (0) 2022.08.15 [Swift] 맵, 필터, 리듀스(map, filter, reduce) (0) 2022.08.15 [Swift] 옵셔널 체이닝(Optional Chaining) (0) 2022.08.11