본 내용은 '스위프트 프로그래밍' 책을 학습한 후 이를 바탕으로 작성한 글입니다.
subscript
설정자
또는 접근자
등의 메서드를 구현하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있다.subscript
키워드를 사용하여 정의한다.subscript(index: Int) -> Int {
get {
//서브스크립트 결괏값 반환
}
set(newValue) {
//설정자 역할 수행
}
}
//읽기 전용으로 구현 가능
subscript(index: Int) -> Int {
//서브스크립트 결괏값 반환
}
struct Student {
var number: Int
var name: String
}
class School {
var number: Int = 0
var students: [Student] = [Student]()
func addStudent(name: String) {
let student: Student = Student(number: self.number, name: name)
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 school: School = School()
school.addStudents(names: "zooneon", "mike", "jhon", "charles")
let student: Student? = school[1]
print("\(student?.name) \(student?.number)") //Optional("mike") Optional(1)
print(school[]?.name) //Optional("zooneon")
subscript
키워드 앞에 static
키워드를 붙여주면 된다.enum School: Int {
case elementary = 1, middle, high, university
static subscript(level: Int) -> School? {
return Self(rawValue: level)
}
}
let school: School? = School[2]
print(school) //School.middle