: 여러 가지 타입의 데이터를 저장하는 Compound(복합/혼합) 타입
let twoNumbers: (Int, Int) = (1, 2)
let threeNumbers = (1, 2, 5)
var threeValues = ("홍길동", 20, "서울")
: 연관된 값의 각각의 데이터의 접근은 앞에서부터 번호를 매겨 0부터 시작이 된다.
print(type(of: threeValues))
print(threeValues.0)
print(threeValues.1)
print(threeValues.2)
/* 결과:
(String, Int, String)
홍길동
20
서울
*/
❗️ type(of: 변수) - 타입을 알고 싶을 때 쓰는 함수
: 데이터의 각 요소에 이름을 매길 수 있다.
let iOS = (language: "Swift", version: "5")
print(iOS.0)
print(iOS.1)
print(iOS.language)
print(iOS.version)
/* 결과:
Swift
5
Swift
5
*/
→ iOS.0 이라는 표현을 써도 좋지만, iOS.language 라는 표현을 쓰면, 어떤 데이터가 튜플의 0번째에 들어있는지 알 수 있다.
→ iOS.0과 iOS.language를 출력해도 결과 값이 동일하다.
❓ 왜 이름이 매겨진 튜플을 사용
: 가독성을 높이기 위해
: 튜플의 각 요소를 상수/변수화 가능(바인딩)
let name = ( 5, 6, 7 )
→ 튜플의 값을 name이라는 한 개의 상수에 저장할 수 있지만,
let (first, second, third) = ( 5, 6, 7 )
→ 데이터 묶음을 한 개씩 분해해 상수나 변수에 저장하는 것도 가능하다.
let threeNumbers = (1, 2, 5)
let (first, second, third) = threeNumbers
print(first) // 결과 : 1
print(second) // 결과 : 2
print(third) // 결과 : 5
❗️ 이때, let, var은 상관없음
: 튜플에서의 비교는 인덱스가 낮은 값을 우선으로 비교한다. ( 실제 사용하는 경우는 흔하지는 않음 )
(1, "zebra") < (2, "apple") // true, 1이 2보다 작고; zebra가 apple은 비교하지 않기 때문
(3, "apple") < (3, "bird") // true 왼쪽 3이 오른쪽 3과 같고; apple은 bird보다 작기 때문
(4, "dog") == (4, "dog")
let iOS = (language: "Swift", version: "4")
if iOS.language == "Swift" && iOS.version == "5" {
print("스위프트 버전 5입니다.")
} else {
print("다른 버전입니다.")
}
if ("Swift","4") == iOS {
print("스위프트 버전 5입니다.")
}
switch iOS{
case ("Swift","4") :
print("스위프트 버전 5입니다.")
default :
break
}
→ 위의 if 조건문을 switch 조건문을 이용하면 단순해진다.❗️ 튜플의 비교에서는 switch 문을 사용하면 더 편하다.
var coordinate = (3, 5)
switch coordinate {
case (let distance, 0), (0, let distance):
print("X 또는 Y축 위에 위치하며, \(distance)만큼의 거리가 떨어져 있음")
default:
print("축 위에 있지 않음")
}
// 결과 : 축 위에 있지 않음
→ 튜플을 사용한 바인딩에서는 조건이 맞는 것만 바인딩 된다.coordinate = (5, 0)
switch coordinate {
case (let x, let y) where x == y:
print("(\(x), \(y))의 좌표는 y = x 1차함수의 그래프 위에 있다.")
case let (x, y) where x == -y:
print("(\(x), \(y))의 좌표는 y = -x 1차함수의 그래프 위에 있다.")
case let (x, y):
print("(\(x), \(y))의 좌표는 y = x, 또는 y = -x 그래프가 아닌 임의의 지점에 있다.")
}
❗️ 이때, let(x, y)와 (let x, let y)는 같은 문장이다.: 함수는 원칙적으로 리턴값이 한개만 존재하기 때문에 여러개의 값을 반환할 수 없지만, 어떤 묶음 값으로는 반환하는 것이 가능하기 때문이다.
❓❗️ 튜플은 많은 데이터를 담는 데는 적합하지 않고, 2~3개의 연관된 값을 담기에 좋은 타입이다. 튜플의 값을 사용하기 위해서는 다시 매핑하는 작업이 필요하기 때문이다.
와,,, 글 너무 잘쓰셨어요,,, 정성이 느껴지는 글이에요! 오늘도 고생 많으셨어요!! 내일도 파이팅입니다!!