티스토리 뷰
반응형
튜플(Tuples)
🗜 튜플이란?
- 여러가지 타입들을 묶어 하나의 타입으로 선언해주는 것입니다. 2개 뿐만 아니라 3개 이상의 타입의 값들도 튜플로 묶일 수 있으며 이렇게 묶인 튜플은 타입이 사용될 수 있는 곳이라면 어디서도 사용 가능합니다.
💻 튜플의 사용 방법
- 튜플의 사용 예시는 아래와 같습니다.
// 1. 튜플의 요소 수만큼 변수를 할당해 사용 let x: (String, Int, Double) = ("hello", 5, 0.5) let (word, number, value) = x // tuple에 접근할 때 요소들이 이름을 갖습니다. // 요소의 개수가 맞지 않는다면 컴파일 에러가 발생합니다. print(word) print(number) print(value) // 2. 튜플을 정의할 때 element에 이름을 붙여주기 let x: (w: String, i: Int, v: Double) = ("hello", 5, 0.5) print(x.w) print(x.i) print(x.v)
👍 튜플의 장점
- Swift에서 함수는 반환값의 타입을 명시해주어야 하기 때문에 여러 타입의 값을 반환하기 어렵기 때문에 튜플을 사용하면 함수에서 여러개의 값, 여러 타입의 값을 반환할 수 있습니다.
- 여러 요소 중 무시해도 되는 값이 있다면 _(under bar)를 활용해서 해당 요소를 무시할 수 있습니다.
- swift에서 _(under bar)는 이걸 무시하겠다는 문자로 사용됩니다.
- 각 요소의 이름을 설정할 수 있습니다.
func getSize() -> (weight: Double, height: Double) { return (250, 80) } let x = getSize() print("weight is \(x.weight)") // return 타입에 네이밍한 튜플을 설정함으로써 결과값에 이름을 통해 접근할 수 있습니다.
Range
📌 Range의 정의
- Range는 무엇이든 연속적으로 표현될 수 있는 것의 양 끝점을 가르킵니다.(A Range in Swift is just two end points)
- Range는 Array와 같이 제네릭(Generic)으로(Range) Int, Index 등 다양한 타입의 Range를 생성할 수 있습니다.
📎Array에서의 Range와 String에서의 Range
- Array에서의 Range와 String에서의 Range는 다릅니다. 실제로 코딩을 하는 과정에서 만난 오류로 이 개념이 기존에 사용하던 언어와 달라 오랫동안 고민해야 했습니다. 아래는 Range의 수도코드 입니다.
struct Range<T> { var startIndex: T var endIndex: T }
- 위와 같이 Range에는 시작점(startIndex)과 끝점(endIndex)이 구현되어 있습니다. Array의 경우 index로 요소가 구별되기 때문에 Range는 Int로 구현됩니다. Array의 범위를 설정하는데 Int형으로 된 Range를 사용하게 됩니다. 반면에 String의 경우 Range가 String.Index로 구현되어 있습니다(Range<String.Index>). 그래서 문자열을 슬라이싱(Slicing)할 때에, Python에서처럼 Int형 인덱스를 활용해 슬라이싱하게되면 오류가 발생합니다. SubString을 위해서는 Int가 아닌 String.Index가 필요합니다.
let array = ["a","b","c","d"] let subArray1 = array[2...3] let subArray2 = array[2..<3]
Reference: Stanford CS193p by Paul Hegarty
반응형
'iOS 앱개발 > Swift Basic' 카테고리의 다른 글
[스위프트(Swift) 프로그래밍] - Escaping Closures(탈출 클로저) (2) | 2021.05.11 |
---|---|
[Swift] - 클래스(Class) vs 구조체(Struct) vs 열거형(Enum) (0) | 2021.03.30 |
[Swift ] - Protocol(프로토콜) vs Inheritance(상속) (0) | 2021.03.30 |
[Swift] 프로퍼티(Properties) (0) | 2021.03.23 |
[Swift] 열거형(Enum) (0) | 2021.03.23 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 암호코드#dp#BOJ#Python
- Triangle#Sorting#Codility#Python
- 나무자르기#BOJ#이분탐색#Python
- 리모컨#완전탐색#BOJ#Python
- 토마토#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- filter#isalnum#lower
- 쿼드트리#BOJ#분할정복#Python
- Brackets#Stacks and Queues#Codility#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 병든 나이트#BOJ#탐욕법#Python
- 순열사이클#BOJ#Python
- N으로 표현#DP#Programmers#Python
- 배열합치기#분할정복#BOJ#Python
- 파이썬알고리즘인터뷰#4장
- Swift#Tuples#Range
- 백준 알고리즘#BackTracking
- 섬의개수#백준알고리즘#Python
- PassingCars#Codility#Python
- 날짜 계산#BOJ#완전탐색#Python
- 종이자르기#분할정복#BOJ#Python
- django
- django#slicing
- 반복수열#백준알고리즘#Python
- 터틀비치#리콘#xbox#controller
- 랜선자르기#이분탐색#BOJ#Python
- 텀 프로젝트#백준알고리즘#Python
- API#lazy#
- Distinct#Codility#Python
- 공유기 설치#BOJ#이분탐색#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함