안녕하세요~ 차니에요!
오늘은 스위프트의 서브스크립트에 대해 알아보겠습니다.
1. 서브스크립트란?
서브스크립트란 콜렉션, 리스트, 시퀀스 등 집합의 특정 멤버 엘리먼트에 간단하게 접근할 수 있는 문법입니다.
텍스트로 보면 잘 와닿지 않을 텐데 사실 우리는 은연중에 서브스크립트를 사용하고 있었을 지도 모릅니다.
var dic = ["강아지": "🐶", "깨구락지": "🐸","판다": "🐼", "꿀벌": "🐝"]
print(dic["깨구락지"]) // 🐸
딕셔너리 하나를 생성하였습니다. 타입 추론을 통해 [String : String] 형태이겠죠?
딕셔너리에서 value 값을 추출하기 위해 dic[KEY] 형태로 사용하셨을 텐데요.
이게 서브스크립트입니다. 띠용? 자세한 설명은 아래에서 이어서 해볼게요.
2. 서브스크립트 기본 문법
subscript(index: Int) -> Int {
get {
// 적절한 반환 값
}
set(newValue) {
// 적절한 set 액션
}
}
서브스크립트는 읽고-쓰기(read-write) 혹은 읽기 전용(read only)으로 사용이 가능합니다.
subscript(index: Int) -> Int {
// 적절한 반환 값
}
읽기 전용 스크립트의 사용 예 입니다.
get을 적어야 할 것 같지만 따로 작성하지 않으면 기본으로 읽기 전용으로 생성됩니다.
물론 명시해도 똑같이 동작합니다.
3. 서브스크립트 사용
3-1. 서브 스크립트
struct Animal {
var name: String?
var age: Int?
var profile: String?
var height = 0.0
var weight = 0.0
}
class Zoo {
var animals: [Animal] = [Animal]()
func addAnimal(animal: Animal) {
self.animals.append(animal)
}
subscript (name: String) -> Animal? {
for animal in self.animals {
if animal.name == name {
return animal
}
}
return nil
}
}
스크립트 사용 예제를 작성해보았습니다.
Animal 구조체에 동물의 정보가 들어가고 Zoo 클래스에 동물이 추가될 것 입니다.
let bear = Animal(name: "곰", age: 12, profile: "🐻", height: 140, weight: 200)
let tiger = Animal(name: "호랑이", age: 8, profile: "🐯", height: 120, weight: 90)
let monkey = Animal(name: "원숭이", age: 20, profile: "🙉", height: 120, weight: 90)
var zoo = Zoo()
zoo.addAnimal(animal: bear)
zoo.addAnimal(animal: tiger)
zoo.addAnimal(animal: monkey)
print(zoo["원숭이"]) // Optional(name: Optional("원숭이"), age: Optional(20), profile: Optional("🙉"), height: 120.0, weight: 90.0)
위 서브스크립트에서 인자로 String(name)을 넘겨주었기 때문에 zoo[NAME]을 입력하면 해당 동물의 데이터를 가져올 것 입니다.
클래스(zoo)에 동물(Animal)이 없을 수도 있으므로 Optional로 처리해주었습니다.
이상으로 포스팅 마치겠습니다.