-
Swift - SubscriptProgramming/Swift 2021. 11. 7. 20:19
안녕하세요 BeePeach입니다 :)
오늘은 Subscript (서브스크립트)에 대해서 공부해보려 합니다.
서브스크립트란 colletcion, seqence의 멤버에 쉽게 접근할 수 있도록 해주는 문법입니다.
메서드를 따로 생성하지 않고 멤버의 값을 바꾸거나 읽을 수 있게 해 줍니다.
단어는 생소하지만 우리는 이미 사용하고 있었습니다.
배열과 딕셔너리에서 []로 접근하는 문법이 바로 subscript입니다.
래퍼런스에 가서 Array를 보면 이렇게 subscript가 이미 구현되어 제공되는 것을 볼 수 있습니다.
그럼 어떻게 구현하는지 서브스크립트를 만들어 보겠습니다.
Syntax
struct, class, enum에서 서브스크립트를 구현할 수 있습니다.
문법은 subscipt 키워드를 이용합니다.
한 개 이상의 parameter를 전달할 수 있고 Return Type을 적어줘야 합니다.
여기서 주의할 점은 parameter와 Return Type은 생략할 수 없습니다.
그리고 getter와 setter를 선언할 수 있습니다.
Computed Property와 똑같이 읽기 전용, 읽기 쓰기 전용으로 만들 수 있습니다.
마찬가지로 getter만 선언했을 때는 get keyword를 생략할 수도 있습니다.
List라는 class를 만들었습니다.
[1]과 같이 [] 안에 정수로 접근하고 싶으니 parameter Type을 Int로 했습니다.
getter에서는 리턴 값이 잘못된 인덱스가 전달되는 경우를 생각해서 Int?로 했습니다.
그래서 유효한 인덱스라면 return data[index]로 원하는 값을 얻을 수 있도록 했습니다.
setter에서는 Return Type을 Int?로 했으므로 기본적으로 제공되는 newValue 파라미터의 Type 또한 Int?입니다.
그래서 바인딩한 후에 값을 변경할 수 있도록 구현했습니다.
서브스크립트를 구현했으므로 List 인스턴스를 생성하고 바로 []를 사용해서 원하는 값에 접근하고 변경할 수 있는 것을 확인할 수 있습니다.
그리고 함수와 같이 ArgumentLabel을 사용할 수도 있습니다.
함수와 다른 부분은 함수는 기본적으로 argumentLabel을 지정하지 않으면 parameterName과 동일하게 지정되지만
서브스크립트는 argumentLabel이 기본적으로 생략이 되어있습니다.
그래서 사용하고 싶다면 앞에 명시적으로 적어줘야 합니다.
위 예시와 모든 게 똑같지만 Line 4에 argumentLabel을 i로 설정했습니다.
그래서 Line 24부터 사용 방법을 확인하면 [] 안에 함수 호출식처럼 i를 적어준 것을 확인할 수 있습니다.
조금 이질적인 느낌이 들기 때문에 정말 필요한 경우가 아니라면 잘 사용하지 않습니다.
다양한 파라미터
서브 스크립트는 대부분 1가지 파라미터만 사용합니다.
하지만 inout paramter를 제외하고는 원하는 함수와 똑같이 어떠한 파라미터도 사용할 수 있습니다.
그리고 두 가지 이상의 파라미터로 사용할 수 있습니다.
Type Subscirpt
지금까지 사용한 서브 스크립트는 InstanceSubscript입니다.
모두 인스턴스를 생성하고 인스턴스 이름을 통해서 접근을 했죠??
지금까지 공부한 프로퍼티, 메서드는 인스턴스 멤버, 타입 멤버를 제공했습니다.
서브스크립트로 마찬가지로 Type Subscript를 제공합니다.
지금까지 공부한 것들과 마찬가지로 static, class 키워드를 사용하고 접근은 Type이름으로 접근합니다.
이번에는 enum에 서브 스크립트를 만들어 봤습니다.
그리고 타입 서브스크립트이기 때문에 인스턴스를 생성하지 않고 타입 이름으로 바로 접근한 것을 볼 수 있습니다.
참고자료
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html
Subscripts — The Swift Programming Language (Swift 5.6)
Subscripts Classes, structures, and enumerations can define subscripts, which are shortcuts for accessing the member elements of a collection, list, or sequence. You use subscripts to set and retrieve values by index without needing separate methods for se
docs.swift.org
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Initializer 기초 (1) 2021.11.13 Swift - Inheritance (상속) (0) 2021.11.11 Swift - Method (0) 2021.11.06 Swift - Property Wrapper Projecting Value (0) 2021.11.05 Swift - Property Wrapper (0) 2021.10.28