티스토리 뷰

[시작]


- 클래스, 구조체, 열거형에는 컬렉션, 리스트, 시퀀스 등 타입의 요소에 접근하는 단축 문법인 서브스크립트를 정의할 수 있음

- 별도의 설정자, 접근자를 정의하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있음

- 배열, 딕셔너리에서 array[index], dictionary[key]와 같이 표현하는 것


- 한 타입에 여러 개의 서브스크립트 정의 가능

- 다른 타입을 인덱스로 갖는 여러 개의 서브스크립트 중복 정의 가능



[서브스크립트 문법]


- 인스턴스의 이름 뒤에 대괄호로 감싼 값을 써줌으로써 인스턴스 내부의 특정 값에 접근할 수 있음

- subscript 키워드를 사용하여 정의

 : 매개변수의 개수, 타입, 반환 타입 등을 지정

 : 읽기전용 / 읽기쓰기 전용으로 구현 가능

- 타입의 구현부 또는 타입의 익스텐션 구현부에 서브스크립트 정의 코드가 위치함

1
2
3
4
5
6
7
8
9
subscript(index: Int-> Int{
    get{
        //적절한 서브스크립트 결과값 반환
    }
    set(newValue){
        //적절한 설정자 역할 수행
    }
}
 
cs


읽기 전용 서브스크립트를 정의할 때는 get, set 키워드가 필요 없음


- 연산 프로퍼티의 문법과 유사함



[서브스크립트 구현]



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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-> Student?{
        if(index<self.number){
            return self.students[index]
        }
        return nil
    }
}
let highSchool = School()
highSchool.addStudents(names: "1""2""3""4""5")
let student = highSchool[2]
print(student?.name, student?.number)
cs


School 타입에서 정의된 서브스크립트는 students 배열의 요소를 반환하도록 되어 있고

아래에서 School 타입의 인스턴스에 서브스크립트 문법을 적용함



[복수 서브스크립트]


- 하나의 타입이 여러 개의 서브스크립트를 가질 수 있음

 : 다양한 매개변수 타입을 활용



[마무리]


- 서브스크립트는 메서드인듯 아닌듯, 연산 프로퍼티인듯 아닌듯 중간 형태를 가지고 있음

- 인스턴스의 이름 뒤에 대괄호만 써서 편리하게 내부 값에 접근하고 설정해줄 수 있음

- 다양한 목적으로 구현해주는 데 용이함

'Swift > 야곰의 스위프트' 카테고리의 다른 글

19장 타입캐스팅  (0) 2018.03.01
18장 상속  (0) 2018.02.28
16장 모나드  (0) 2018.02.12
15장 맵, 필터, 리듀스  (0) 2018.02.12
14장 옵셔널 체이닝과 빠른 종료  (0) 2018.02.12
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함