-
[스위프트 : 기초] 서브스크립트 : Subscript : 지름길스위프트: Swift/스위프트: 언어자체: 문법 2018. 10. 8. 20:11
안녕하세요 ! 씩이 입니다!
저는 Swift 와 iOS 를 공부하고 연구하는 대딩 ( 대학생 ) 이구요!
같은 분야를 공부하는 분들에게 조금이라도 도움이 주고 싶어서 공부하는 것들을 공유합니다.
제 3자가 있다고 가정하고 설명하기 때문에 존대를 하지 않는점 이해 부탁드립니다.
공유가 미래 라고 생각합니다.
한국의 모든 개발자분들 존경합니다!
- Swift version : Swift 4.2 ( 18.09. 01 ~ ) Swift 언어
- 참고한 것들
- 씩이 Github
- 자료구조 소스파일 있습니다.
- iOS 관련 자료들, 정보들 정리해 두었습니다.
- 스위프트로 구현한 자료구조 : DataStructures in Swift4
- Swift4 : 연결리스트 (1 / 3) : #LinkedList : #DataStructrue : #자료구조
- Swift4 : 연결리스트 (2 / 3) : #LinkedList : #값 추가하기, push, append : #값 삽입하기,insert
- Swift4 : 연결리스트 (3 / 3) : #LinkedList : #값 제거하기, pop, removeLast, remove(at: )
- Swift4: 스택: #Stack: #자료구조: #DataStructure: #쌓기
- [스위프트 : 자료구조] 큐 (1 / 4): Queue: #자료구조: #배열로 구현한 큐: #배열의원리
- [스위프트 : 자료구조] 큐 (2 / 4): Queue: #자료구조: #연결리스트: #더블연결리스트: #DoublyLinkedList
- [스위프트 : 자료구조] 큐 (3 / 4): Queue: #자료구조: #Stack으로 구현: #더블스택: #DoubleStack: #제일좋음
- [스위프트 : 자료구조] 큐 (4 / 4): Queue: #자료구조: #RingBuffer: #링버퍼로 구현한 큐: #고정된배열: #마지막!!
- 스위프트: 트리: Tree: #자료구조: #깊이우선탐색: #레벨정렬탐색: #검색알고리즘: Swift4
- 스위프트: 이진 탐색 트리(1 / 2): #BinarySearchTree: #자료구조: #배열과 비교: #트리: #탐색: #삽입: #삭제
- 스위프트: 이진 탐색 트리(2 / 2): #BinarySearchTree: #자료구조: #배열과 비교: #트리: #탐색: #삽입: #삭제
- [스위프트 : 자료구조] AVL Tree: 자가 균형 트리: #balance: #트리의 높이: #rotation메소드: #성능오짐
- 스위프트로 구현한 알고리즘 : Algorithms in Swfit4
- [스위프트 : 알고리즘] 재귀호출 (1 / 6) : recursive: 재귀호출 : 재귀함수: 반복문: 팩토리얼: 거듭제곱: 피보나치: 하노이의 탑: 최대공약수
- [스위프트 : 알고리즘] 재귀 : 팩토리얼 (2 / 6) : factorial: 재귀호출 : 재귀함수: 반복문: 팩토리얼: 거듭제곱: 피보나치: 하노이의 탑: 최대공약수
- [스위프트 : 알고리즘] 재귀 : 거듭제곱 (3 / 6) : Power: 재귀호출 : 재귀함수: 반복문: 팩토리얼: 거듭제곱: 피보나치: 하노이의 탑: 최대공약수
- [스위프트 : 알고리즘] 재귀 : 피보나치 수열(4 / 6) : Fibonacci: 재귀호출 : 재귀함수: 반복문: 팩토리얼: 거듭제곱: 피보나치: 하노이의 탑: 최대공약수
- [스위프트 : 알고리즘] 재귀 : 하노이의 탑 (5 / 6) : Hanoi: 재귀호출: 재귀함수: 반복문: 팩토리얼: 거듭제곱: 피보나치: 하노이의 탑: 최대공약수
- [스위프트 : 알고리즘] 재귀 : 최대공약수 (6 / 6) : GCD: 재귀호출: 재귀함수: 반복문: 팩토리얼: 거듭제곱: 피보나치: 하노이의 탑: 최대공약수
- Swift 주제별 분류
- Swift4 : 제어 전달 명령문( Control Transfer Statement ) : #continue, #break, #return 키워드
- Swift4 : 클래스와 구조체 : #값을 대하는 방식 : #참조타입, 값 타입 : #===
- Swift4 : 프로퍼티 : #Property : #get, set : #willSet, didSet
- Swift4 : 메소드 : #Method : #영향력 범위 : #self : #mutating : #값타입 수정
- Swift4 : 프로토콜 1 : #Protocol : #설계 : #요구사항 : #델리게이트 패턴 전처리 (1 / 2)
- Swift4 : 프로토콜 2 : #델리게이트 패턴 : #델리게이션 (2 / 2)
- Swift4 : 제네릭 : #Generics : #왜필요해? : #where키워드 : #제약사항걸기
- Swift4 : 자동 참조 카운팅 : #Automatic Referece Counting : #ARC :#강한참조 : #Strong Reference Cycle : #메모리 누수
- Swift4 : 클로저: Closure: #표현방식: #왜필요해?: #효율적: #간결성: #생략
- [스위프트 : 기초] 서브스크립트 : Subscript : 지름길
서브스크립드 : Subscript
서브스크립트가 뭐야?
- 컬렉션, 리스트, 시퀀스 타입의 개별 요소에 접근할 수 있는 지름길을 제공하는 것.
- 컬렉션, 리스트, 시퀀스가 뭔지 모른다면?
- 처음 문법을 배운다면 모를 수 있어. 하지만 서브스크립트를 이해하는데 영향을 끼치지 않는다는거! 걱정 ㄴㄴ
- 하지만 뭔지는 알려줄게. 이것은 protocol 로 정의된 건데, 예로 dictionary 데이터 구조는 Sequence 프로토콜을 따르는 데이터 구조야.
- 스위프트가 프로토콜 지향 언어라고 불리는 이유가 다 이런 이유지!
- let array = [1, 2, 3] 라는 배열이 있다고 하자.
- 배열 내부의 2라는 값을 얻기 위해 array[1] 이라는 문법을 사용하잖아?
- 여기에서 array[1] 빨간색 부분을 이용해서 값을 찾아간 거잖아?
- 이렇게 내가 원하는 값을 쉽게 찾기 위해 정의하는 문법을 서브스크립트 라고 한다.
- array 가 서브스크립트 문법을 구현하지도 않았는데 사용할 수 있는 이유는
- 스위프트 표준 라이브러리에 정의된 array 구조체 내부에 서브스크립트가 이미 구현되어 있기 때문이야!
어떻게 구현해?- 서브스크립트은 subscript 키워드를 사용해.
- 전체적인 기본 틀은 아래와 같아 (출처 : 애플 공식 문서)
- 연산 프로퍼티에서 사용했던 get, set 키워드가 여기에 쓰여! get, set 모른다면 여기
- subscript(index: Int) -> Int {
- get {
- // return an appropriate subscript value here
- }
- set(newValue) {
- // perform a suitable setting action here
- }
예제 구현해보자 2개 보여줄게
- 구구단 ( by 애플 공식 문서 )
12345678910struct TimesTable { // 구구단!let multiplier: Intsubscript(index: Int) -> Int {return multiplier * index// 서브스크립트에 입력하는 정수만큼 곱하는 것.// set 없이 읽기 전용}}let threeTimesTable = TimesTable(multiplier: 3) // 구구단 3단print("six times three is \(threeTimesTable[6])") // 서브스크립트에 [6] 입력됬으니 3*6 해서 18출력됩니다.cs - 영화 리스트
- MovieList 클래스의 인스턴스를 사용해서 서브스크립트를 이용해서 내부의 tracks 프로퍼티의 내부 요소를 찾는다.
- 이렇듯 내가 원하는 곳에 그것이 클래스든! subscript 문법을 적용할 수 있다.
123456789101112131415class MovieList { // 영화 리스트 클래스.private var tracks = ["The Godfather", "The Dark Night", "Superman"]subscript(index: Int) -> String {get {return self.tracks[index]}set{self.tracks[index] = newValue}}}var movieList = MovieList() // 클래스 인스턴스 만들고print("영화 리스트에서 두 번째 영화는 \(movieList[1])") // The Dark Night 출력됨.cs '스위프트: Swift > 스위프트: 언어자체: 문법' 카테고리의 다른 글
댓글