You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
콜렉션, 리스트, 시퀀스 등 집합의 특정 member elements에 간단하게 접근할 수 있는 문법
컬렉션, 리스트, 시퀀스 타입의 개별 요소에 접근할 수 있는 지름길을 제공하는 것.
추가적인 메소드 없이 특정 값을 할당하거나 가져올 수 있다.
Ex.) array[index]로 배열의 인스턴스 항목과 dictionary[key]로 딕셔너리 인스턴스 항목에 접근하는 것
단일 타입에 여러 서브스크립트를 정의할 수 있다 (서브스크립트 중복 정의)
파라미터나 리턴형을 생략할 수 없고, getter와 setter모두 구현할 수 있다.
get-only는 가능하지만, set-only는 불가능하다(setter생략 불가)
다양한 타입에서의 Subcript
Array에서의 Subscript
letarray=[1,2,3]// array 가 서브스크립트 문법을 구현하지도 않았는데 사용할 수 있는 이유는 // 스위프트 표준 라이브러리에 정의된 array 구조체 내부에 서브스크립트가 이미 구현되어 있기 때문// 배열의 서브스크립트는 parameter로 Int형을 index로 받고, 해당 index에 해당하는 Element를 반환하는 형태array[0]// Subscript 사용! ( -> [0] )
Dictionary에서의 Subscript
배열와 마찬가지로 [] 이것이 서브스크립트임
Dictionary의 서브스크립트는 Parameter로 Key를 받고, 해당 Key에 해당하는 Value를 반환하는 형태임
서브스크립트는 파라미터 선언 당시 Argument Label을 _로 처리해주지 않아도 Argument Label로 사용되지 않음
subscript(index: Int)-> Int{// 이렇게 _없이 선언해도get{}set(newValue){}}Type[2]// 이렇게 Argument Label이 없다.
굳이 Argument Label을 쓰고싶다면 이렇게
subscript(index index: Int)-> Int {get{}set(newValue){}}Type[index:3]
타입 서브스크립트
타입 프로퍼티, 타입 메서드에서 공부했듯이 서브스크립트 또한 타입 서브스크립트로 선언이 가능함
오버라이딩이 불가하다면 static, 가능하다면 class로 선언해주면 타입 서브스크립트가 되는 것
structStack{staticvarstack:[Int]=[0,1,2,3]static subscript(index:Int)->Int{returnstack[index]}}// 실제로, 인스턴스 없이 타입 이름에서 Element에 접근이 가능Stack[0]// 0Stack[1]// 1