k-coding

Swift 튜플 (TUPLE) 본문

iOS/Swift 정리

Swift 튜플 (TUPLE)

chkhn_oiiu 2021. 9. 6. 17:13

Swift 튜플 (TUPLE)

 

다양한 값들의 묶음으로 , 한 묶음안에 데이터 타입들이 같은 필요 없고, 개수 제한도 없다.

 

기본적으로는   var 변수명 : (데이터 타입1, 데이터 타입2, 데이터 타입3) = ( 값1 , 값2 , 값3) 과 같은 형태로 구성한다.

 

예제 ) 

var tuple_1 :(String,Int,Int) = ("choiKi",19,25)

var tuple_2 = ("choiKi",19,25)

 

튜플에는 튜플의 값들을 변수에 넣어줄 수 있다.

 

예제 ) 

var tuple = ("choiKi","Swift",1)

var (name,language,days) = tuple

print("제 이름은 \(name)이고 현재 \(language)를 공부한지 \(days)일차 입니다.")

// 결과 -> 제 이름은 choiKi이고 현재 Swift를 공부한지 1일차 입니다.

 

튜플들에 들어있는 값을 호출 할 때는 배열의 index를 생각하면 편하다.

 

예제 )

var tuple = ("choiKi","Swift",1)

print("제 이름은 \(tuple.0)이고 현재 \(tuple.1)를 공부한지 \(tuple.2)일차 입니다.")

// 결과 -> 제 이름은 choiKi이고 현재 Swift를 공부한지 1일차 입니다.

 

위에 2가지 예제를 합치게 되면

 

튜플에 key를 설정하면서 변수에 저장하지 않고 호출이 가능하다.

 

예제 )

var tuple = (name:"choiKi", language:"Swift", days:1)

print("제 이름은 \(tuple.name)이고 현재 \(tuple.language)를 공부한지 \(tuple.days)일차 입니다.")

// 결과 -> 제 이름은 choiKi이고 현재 Swift를 공부한지 1일차 입니다.

 

 

Tuple Decomposition

 

한국어로 해석하면 튜플 분해라고 할 수 있겠다.

var tuple = (name:"choiKi", language:"Swift", days:1)

 

 

다음과 같은 튜플을 하나하나 상수에 저장하고자 하면 아래와 같이 되는데

var tuple = (name:"choiKi", language:"Swift", days:1)

let name = tuple.name
let language = tuple.language
let days = tuple.days

지금은 멀쩡할지 몰라도 튜플의 갯수는 무한할수 있기 때문에 갯수가 많아지면 코드가 너무 길어진다.

 

이러한 문제점을 해결하는 방법이 튜플 분해이다.

 

 

var tuple = (name:"choiKi", language:"Swift", days:1)

let (name,language,days) = tupel

이렇게 지정해주면 각각 상수 name,language,days에 tuple의 값을 순서대로 지정한 것이다.

 

간단한 튜플안에서도 위에서 3줄짜리 코드를 한줄로 줄여주는 편리한 기능이다.

 

 

 

하지만 튜플 분해를 이용할 때에는

 

반드시 지정하는 상수의 갯수튜플의 갯수동일해야한다는 제약이있다.

 

이럴때에 튜플의 모든 값을 다 저장하고 싶지 않을때에는 _ 를 사용하면된다.

var tuple = (name:"choiKi", language:"Swift", days:1)

let (name, _ ,days) = tupel

 

 

이렇게 지정하면 각각 name과 days라는 상수에만 각 인덱스에 맞는 값이 지정되고,

 

1번 index값을 가지는 상수는 만들어지지않는다.

 

 

+++

 

이러한 튜플은 switch문에서 굉장히 유용하게 사용된다.

 

다음은 stage1에서 500점, stage2에서 300점을 받고 stage3에서는 무제한으로 점수를 쌓아 1000점을 넘기면

 

점수를 기록해주는 코드이다.

let myPoint = (500,300,120)

switch myPoint {
	case let (stage1,stage2,stage3) where stage1 + stage2 + stage3 >= 1000 :
    	print("성공 당신의 점수는 \(stage1+stage2+stage3)점입니다.")
    case (500,300,_):
    	print("stage3에서 탈락")
    case (500,_,_):
    	print("stage2에서 탈락")
    case (_,_,_):
    	print("stage1에서 탈락")
    default:
        break
}

 

'iOS > Swift 정리' 카테고리의 다른 글

Swift 클로저( closure )  (0) 2021.09.30
Swift 1급 객체 / 시민  (0) 2021.09.29
Swift 조건문  (0) 2021.09.09
Swift 옵셔널 (Optional)  (0) 2021.09.07
Swift 변수, 상수  (0) 2021.09.06
Comments