티스토리 뷰
튜플
(Tuple)
1) 이론적 정의
* 튜플은 Swift에서 제공하는 특별한 성격의 집단 자료형이며, 배열이나 딕셔너리와는 달리 여러 가지 타입의 아이템을 저장할 수 있다.
* 그러나, 선언 후에는 값의 추가나 삭제와 같은 변경이 불가능하다.
2) 문법적 정의
* 정의 방법 : ( #item1#, #item2#, ... )
* e.g. let inswag: (Int, String, Bool, Character, Double) = (3, "INSWAG", false, "a", 7.7)
3) 다양한 성격의 튜플이 존재한다.
* Unnamed Tuple (값에 대해 별도의 이름이 없는 튜플)
let threeNumbers: (Int, Int, Int) = (1, 2, 3)
type(of: threeNumbers) <---- (Int, Int, Int).Type
threeNumbers
// 튜플의 각 아이템에 대한 접근 방법
threeNumbers.0 <---- 1
threeNumbers.1 <---- 2
threeNumbers.2 <---- 3
Reference.
- 배열에서의 Index 사용 : threeNumbers[0]
- 튜플에서의 Index 사용 : threeNumbers.0
var threeValues: (Int, Double, String) = (1, 2.3, "456")
type(of: threeValues) <---- (Int, Double, String).Type
threeValues <---- (.0 1, .1 2.3, .2 "456") * 빨간 부분이 Index, 검정 부분이 Value
threeValues.0 = 5 <---- 데이터를 집어 넣어줄 수 있다.
threeValues <---- 변한 것을 위와 비교하여 확인 : (.0 5, .1 2.3, .2 "456")
* typealias(타입앨리어스)
Q. 아... 그런데 저 위의 형광펜으로 표시된 표현식이 너무 길어요... 어떻게 방법이 없을까요?
A. typealias 를 사용하면 해결할 수 있습니다.
typealias MyData = (Int, Double, String) <---- 데이터가 많아질 때는 타입 앨리어스를 사용해준다.
var threeValues2: MyData <---- 타입 앨리어스 사용으로 정말 간단해진 타입 명시!!! **개이득**
* Decompostion(분해)
let threeNumbers: (Int, Int, Int) = (1, 2, 3)
Case 1.
let numbers = threeNumbers
numbers <---- (.0 1, .1 2, .2 3)
numbers.0 <---- 1
numbers.1 <---- 2
Case 2.
let (first, second, third) = threeNumbers
first <---- 1
second <---- 2
third <---- 3
* Wildcard('_', 언더바) pattern
- 사용하지 않을 튜플 아이템은 변수나 상수를 정의하는 대신 언더바( _ )로 대체할 수 있다.
- 컴파일러는 언더바로 표현된 부분에 해당하는 아이템은 할당하지 않고 지나간다.
let (_, seconde, thirde) = threeNumbers <---- (Int, Int, Int) = (1, 2, 3) 이 let (_, seconde, thirde) 에 할당되었다. 그런데 _ 는 무엇일까? 아래의 결과를 보자
_ <---- 사용하지 않을 튜플 아이템으로서 _ 를 사용했기 때문에 오류가 발생한다.
seconde <---- 2
third <---- 3
* Named Tuple (값에 대해 이름을 붙여준 튜플)
// 기존에 앞에서 했던 방식 : let iOS = ("Swift", "4")
let iOS = (language: "Swift", version: "4")
iOS.0 <---- "Swift"
iOS.1 <---- "4"
iOS.language <---- "Swift"
iOS.version <---- "4"
* Tuple Matching
let somePoint = (1, 1)
switch somePoint { <---- somePoint의 값에 대한 일치 여부를 확인하는 switch 문.
case (0, 0): <---- 불일치
print("\(somePoint) is at the origin")
case (_, 0): // X축 <---- 불일치
print("\(somePoint) is on the x-axis")
case (0, _): // Y축 <---- 불일치
print("\(somePoint) is on the y-axis")
case (-2...2, -2...2): <---- (1, 1) 이 (-2 ~ 2 사이, -2 ~ 2 사이) 에 포함되므로 일치하는 패턴.
print("\(somePoint) is inside the box") <---- (1,1) is inside the box 출력.
default:
print("\(somePoint) is outside of the box")
}
* Tuple & Dictionary
let fruits = ["A": "Apple", "B": "Banana", "C": "Cherry"]
- Dictionary의 아이템에는 선수가 없지만 키에는 내부적으로 순서가 있으므로 for ~ in 구문의 사용이 가능하다.
for (key, value) in fruits {
print(key, value)
}
결과)
C Cherry
B Banana
A Apple
- 자신이 입력한 값의 순서대로 출력이 되지 않은 것은 딕셔너리의 고유 키에 대한 값을 처리하는 기준 때문에 그렇다.
그렇기 때문에 자신이 생각하는 순서대로 저장되지 않을 수 있다.
지금까지 튜플(Tuple)에 대해서 알아보았습니다. 틀린 부분이 있으면 댓글로 지적 부탁드립니다
Made by Inswag's Swift in FastCampus 7th iOS Development School
'Programming > Swift' 카테고리의 다른 글
1. Swift : 열거형(Enumerations) (0) | 2018.06.15 |
---|---|
1. Swift : 제어 전달문(Control Transfer Statement) (0) | 2018.06.02 |
1. Swift : 반복문(Loops) (0) | 2018.05.23 |
1. Swift : 조건문(Conditional Statements) (0) | 2018.05.23 |
1. Swift : 접근 제어(Access Control) (0) | 2018.05.22 |
- Total
- Today
- Yesterday
- ARC
- GCD
- array
- OOP
- 딕셔너리
- 패스트캠퍼스
- tca
- 튜플
- 깃허브
- 개발스쿨
- 열거형
- Operator
- 리터럴
- 타입
- var
- 패캠
- function
- fallthrough
- 스위프트
- lifecycle
- Swift
- fastcampus
- Dictionary
- 프로그래밍
- inswag
- iOS개발스쿨
- ios
- commit
- swiftUI
- 컨버전
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |