Tuples

Tuples

  • 두개 이상의 값을 저장할 수 있다.
  • 서로 다른 타입의 값을 저장할 수 있다.
  • 튜플의 길이는 고정되어있다. 배열과 반대
기본 문법 📝
(expr1, expr2, ...)
expr1,expr2는 Tuple Member로 부른다.

tuple.n // 호출 방법

가상의 데이터 저장해보기

let data = ("park",28,60.5)

위 코드의 타입을 보면 (String, Int, Double)로 서로 다른 타입의 값을 튜플에 저장할 수 있다.

튜플에 저장된 값에 접근하기

let data = ("park",28,60.5)

data.0
data.1
data.2

튜플에 저장된 값에 접근하기위해서는 tutle.n 형식으로 접근할 수 있다. data 상수에서 저장된 값에 접근하기 위해서는 data.0 data.1 data.2로 접근할 수 있다.

튜플에 저장된 값 바꾸기

let data = ("park",28,60.5)

data.0 = "Kim" // 에러 발생

var mutableTuple = data
mutableTuple.0 = "Kim"

위 코드처럼 값을 바꾸려하면 data가 상수로 선언되어 있기 때문에 에러가 발생한다. 변수를 새로 생성하고 값을 바꿔주면 정상적으로 바뀐다.


Named Tuple

  • 튜플 멤버에 이름을 붙이면 가독성이 높아진다.
  • 기존 인덱스로 접근하는 방식에서 멤버이름으로 접근할 수 있다.
기본 문법 📝
(name: expr1, name: expr2, ...)

tuple.memberName // 호출 방법

튜플멤버에 이름 붙이기

let named = (a: "park", b: 28, c: 60.5, d: 250)

named.a // "park"
named.b // 28
named.c // 60.5
named.d // 250

튜플 멤버가 어떤 값을 가지고 있는지 직관성이 높아졌다.


튜플 분해 (Tuple Decomposition)

  • 튜플에 저장된 멤버를 개별 상수나 개별 변수에 저장할 수 있다.
기본 문법 📝
let (name1, name2, ...) = tutpeExpr
var (name1, name2, ...) = tutpeExpr

개별 상수에 저장하기

let named = ("park", 28, 60.5, 250)

let a = named.0 // "park"
let b = named.1 // 28
let c = named.2 // 60.5
let d = named.3 // 250

let named = (a: "park", b: 28, c: 60.5, d: 250)

let aa = named.a 
let bb = named.b 
let cc = named.c 
let dd = named.d 

위 코드와 같이 개별적으로 저장하면 번거롭다.
Decomposition 문법을 사용하여 저장하면 간단하게 저장할 수 있다.

let named = ("park", 28, 60.5, 250)

let (a,b,c,d) = named
print(a) // "park"

named에 저장된 튜플의 수와 a,b,c,d 이름의 수가 같아야 한다.


Tuple Matching

  • 튜플에 저장된 값을 매칭할 수 있다.
let number = (100, 200)

if number.0 == 100 && number.1 == 200 {
    print("OK")
}

if문으로 튜플에 저장된 값을 매칭시키는것도 문제없이 가능하다. 하지만 새로운 조건이 추가될때마다 else-if로 계속 추가해주어야 하기때문에 코드가 복잡해지므로 비효율적이다. 그래서 switch문으로 간단하게 값을 매칭시킬수있다.

let Point = (1, 1)

switch Point {
case (0, 0):
  print("\(Point) 원점")
case (_, 0):
  print("\(Point) x축에 있다.")
case (0, _):
  print("\(Point) y축에 있다.")
case (-2...2, -2...2):
  print("\(Point) 범위 안에 있다")
default:
  print("\(Point) 범위 밖에 있다.")
}

위 코드는 특정 범위안에 좌표가 있는지 확인하는 코드로 원하는 값만 비교하려면 _ 와일드카드패턴을 사용하면된다.(와일드카드 패턴을 사용하게되면 그 값을 무시한다), case (-2...2, -2...2):처럼 범위도 지정하여 비교할 수 있다.

좋은 웹페이지 즐겨찾기