Tuple

윤주현·2023년 8월 17일

Swift

목록 보기
12/13

Tuple

튜플은 값들의 그룹이며 함수에서 여러개의 값을 리턴할 때 사용한다. 또한 튜플은 클래스나 구조체를 생성하는 것보다 가볍기 때문에 간단한 데이터 구조를 만들 때 사용할 수도 있다.

// 튜플 생성
let error = (404, "Not Found")

// 인덱스를 통해 값에 접근하거나
let code = error.0 // 404
let description = error.1 // Not Found

// 파라미터를 통해서 값에 접근할 수 있다.
var person = (firstName: "John", lastName: "Smith")

var firstName = person.firstName // John
var lastName = person.lastName // Smith

// 튜플은 값 타입이므로 전달될 때 새로운 복사본을 만든다.
var origin = (x: 0, y: 0)

var point1 = origin
point1.x = 3
point1.y = 5

origin // (0, 0)
point1 // (3, 5)

// 튜플은 타입이며 다음과 같이 표현될 수 있다.
let atuple = ("tuple", 1, true) // (String, Int, Bool)

// 아무것도 없는 튜플은 Void로 표현한다.

// 클래스 대신 튜플을 사용하여 간단한 객체를 만들 수 있다.
let aPerson = (firstN: "John", lastN: "Smith")

// 튜플은 분해할 수 있다.
let (firstN, lastN) = aPerson // 파라미터와 같은 이름으로 분해하거나
let (first, last) = aPerson   // 다른 이름으로 변경할수도 있다.

var (onlyFirstName, _) = aPerson // _를 넣어서 필요 없는 값은 무시할 수 있다.
var (_, onlyLastName) = aPerson

firstN // "John"
lastN // "Smith"
onlyFirstName // "John"
onlyLastName // "Smith"

// 여러개의 변수를 생성하거나 값을 변경할때도 사용할 수 있다.
var (a, b, c) = (1, 2, 3)
a // 1
b // 2
c // 3

(a, b, c) = (4, 5, 6)
a // 4
b // 5
c // 6

// 튜플을 사용하여 여러개의 값을 리턴하는 예시.
func split(name: String) -> (firstName: String, lastName: String) {
    let split = name.split(separator: " ")
    return (String(split[0]), String(split[1]))
}

let parts = split(name: "John Smith")
parts.0 // "John"
parts.1 // "Smith"
parts.firstName // "John"
parts.lastName // "Smith"

// 배열의 enumerated 메소드를 사용하면 리턴 값으로 인덱스와 값을 가지는 튜플을 받을 수 있다.
let drivers = ["Magnussen", "Raikkonen", "Hamilton", "Verstappen"]

for (index, name) in drivers.enumerated()
{
    print("\(name) has position \(index)")
}

// for문 대신 map 사용
drivers.enumerated().map {
    print("\($0.0) has position \($0.1)")
}

튜플은 일급 객체(First-Class Citizen)이다.

0개의 댓글