Swift문법 - (4)튜플(Tuple)

Youth·2022년 9월 16일
0

swift문법공부

목록 보기
4/27
post-thumbnail
post-custom-banner

튜플(Tuple)

  • 2개이상의 연관된 데이터(값)를 저장하는 Compound(복합/혼합) 타입
// 특별하게 타입이 정해져 있지 않음
// 포함될 데이터 갯수를 마음대로 정의하기 나름

let twoNumbers: (Int, Int) = (1, 2)
//type(of: twoNumbers)

let threeNumbers = (1, 2, 5)
//type(of: threeNumbers)

var threeValues = ("홍길동", 20,  "서울")      // 멤버(데이터의 종류 및 갯수)는 튜플을 만들때 결정되므로 "추가"/"삭제" 불가
//type(of: threeValues)

연관된 값(튜플)의 각각의 데이터의 접근

threeValues.0       // "홍길동"
threeValues.1       // 20
threeValues.2       // "서울"

Named Tuple(이름이 매겨진 튜플)

// 일반적으로 위처럼 사용하면, 혼동할 가능성이 큼
typealias IOS = (language: String, version: String)
let iOS: IOS = ("Swift", "5")
let iOS2: IOS = ("Java", "6")

// 코드의 가독성이 높아짐
iOS.version         // 5
iOS.language        // "Swift"
iOS2.language       // 6
iOS2.version        // "Java"

튜플과 switch문

let iOS = (language: "Swift", version: "5")

// 이런 코드를 아래의 스위치문을 이용하면 단순해짐
if iOS.0 == "Swift" && iOS.1 == "5" {
    print("스위프트 버전 5입니다.")
}

if iOS == ("Swift", "5") {
    print("스위프트 버전 5입니다.")
}

// 스위프트의 switch문은 튜플 매칭을 지원 ===> 코드를 단순한 형태로 표현 가능
switch iOS {
case ("Swift", "5"):             // ("Swift", "5") == iOS
    print("스위프트 버전 5입니다.")
case ("Swift", "4"):
    print("스위프트 버전 4입니다.")
default:
    break
}

튜플의 바인딩(케이스 매칭의 느낌으로 기억)

var coordinate = (0, 5)   // 좌표계

switch coordinate {
//(let distance, 0)인 케이스 또는 (0, let distance)인 케이스의 경우
// let distance = 값
case (let distance, 0), (0, let distance):   // x축이나 y축에 있으면 출력하라는 코드
    print("X 또는 Y축 위에 위치하며, \(distance)만큼의 거리가 떨어져 있음")
default:
    print("축 위에 있지 않음")
}

튜플의 where절 활용

coordinate = (5, 0)

switch coordinate {

**//(let x, let y)나 let(x, y)나 똑같은데 내가 읽기에는 전자의 케이스가 나은듯**

case (let x, let y) where x == y:    //일단 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 그래프가 아닌 임의의 지점에 있다.")
}
profile
AppleDeveloperAcademy@POSTECH 1기 수료, SOPT 32기 iOS파트 수료
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 3월 16일

👍

답글 달기