[Swift] 4. 튜플(Tuple)
1. 튜플
- 원하는 연관된 데이터의 조합으로 만들 수 있는 타입이다.
- 변수를 선언과 동시에 해당 멤버(데이터의 종류 및 개수)가 결정되므로 추가/삭제는 불가능하다.
- var로 선언하면 요소 교체는 가능하다.
-
서로 다른 타입을 묶어서 반환하거나 전달할 때 사용한다.
// 좌표 let position: (Int, Int) = (1, 2) // position.0, position.1로 접근 가능 print(position.0) print(position.1) // 3차원 공간 let position3D: (Int, Int, Int) = (1, 2, 3) print(position3D.0) print(position3D.1) print(position3D.2) // 태입 앨리어스를 이용하여 튜플의 묶음값을 치환해서 사용가능(이 자체가 하나의 타입) typealias GridPoint = (Int, Int) let grid: GridPoint = (1, 2) print(grid.0) print(grid.1)
Named Tuple(이름이 매겨진 튜플)
-
데이터의 각 요소에 이름을 붙일 수 있다.
let iOS = ("Swift", "6.0") let iOS2 = (language: "Swift", version: "6.0") print(iOS.0, iOS.1) print(iOS2.0, iOS2.1) print(iOS2.language, iOS2.version) // Swift 6.0 // Swift 6.0 // Swift 6.0
Decomposition(튜플의 분해)
- 튜플의 각 요소를 상수/변수화 가능하다. (바인딩)
-
특징: 데이터를 분해해서 활용할 수 있다.
let (name, age, address) = ("홍길동", 20, "서울") print(name) print(address)
튜플과 조건문 활용
-
if문 활용
let iOS = ("Swift", "6.0") if iOS.0 == "Swift" && iOS.1 == "6.0" { print("Swift 버전 \(iOS.1)") } if iOS == ("Swift", "6.0") { print("Swift 버전 \(iOS.1)") }
- switch문 활용
-
변수의 케이스에 따라 구분할 때 주로 사용한다.
switch iOS { case ("Swift", 5): print("스위프트 버전 5") case ("Swift", 6): print("스위프트 버전 6") default: break }
- 튜플의 switch문 바인딩
-
각 케이스 내에서 튜플의 각 요소를 활용할 때 주로 사용한다.
switch coordinate { case (let x, let y): print("좌표는 (\(x), \(y)) 입니다.") default: break }
- 튜플의 switch문 바인딩/where절
-
특정 조건에 따라 튜플 케이스를 처리하고 싶을 때 주로 사용한다.
switch coordinate { case let (x, y) where x == y: print("좌표는 (\(x), \(y)) 입니다.") default: break }
튜플을 사용하는 이유 with function
- 함수는 원칙적으로 리턴값이 하나만 존재하여 여러 값을 반환할 수 없다.
-
하지만 튜플을 리턴하면 묶음 값으로 반화할 수 있다.
func tuple() -> (String, Int) { return ("Index", 26) } print(tuple())
Leave a comment