티스토리 뷰

swift/문법

10. Swift 문법 - Tuples

DevBee 2020. 10. 17. 16:41

이번 글에서는 Swift 의 Tuples 에 대해 알아보겠습니다.

 

1. Tuples

Swift 의 기본적인 자료형(Int, String, Bool 등)은 값을 하나만 저장할 수 있는 Scala Type 입니다.

Tuple 은 2개 이상의 값을 한번에 저장할 수 있는 자료형이며 이를 Component Type 이라고 합니다. 이때 서로 다른 자료형도 같이 저장할 수 있습니다.

// 표현식
// (expr1, expr2, ...)
// 각각의 expr 는 Tuple Member 라고 함

let data = ("<html>", 200, "OK", 12.34)
data  // 자료형은 (String, Int, String, Double) 을 저장하는 튜플

// 튜플 멤버에 접근할 때는
// tuple표현식.n
// n 은 0-based Index
// Tuple 멤버에 이름이 없는 경우 index 로 접근함

data.0  // <html>
data.1  // 200
data.2  // OK
data.3  // 12.34

 

튜플의 크기는 튜플을 생성할 때 정해지기 때문에 새로운 멤버를 저장하거나 삭제할 수 없습니다. 단, 튜플이 변수로 선언된 경우 튜플의 멤버를 변경할 수는 있습니다.

// data.1 = 404 - 에러

var mutableTuple = data
mutableTuple.1 = 404
mutableTuple.1

 

2. Named Tuples

가독성을 높이기 위해 Tuple 멤버에 이름을 부여하는 방식으로 표현식과 사용 방법은 다음과 같습니다.

// 표현식
// (name1: expr1, name2: eapr2, ...)

// 접근 방법
// tuple표현식.memberName

let named = (body: "<html>", codeStatus: 200, codeMsg: "OK", dataSize: 12.34)
named.0           // <html>
named.body        // <html>
named.codeStatus  // 200
named.codeMsg     // OK
named.dataSize    // 12.34

 

3. Tuple Decomposition

튜플에 저장되어 있는 멤버를 개별 상수나 개별 변수에 따로 저장하는 방식을 말합니다.

// 문법
// let (name1, name2, ...) = tupleExpr
// var (name1, name2, ...) = tupleExpr
// 상수, 변수의 수는 tuple의 멤버 수와 동일해야 함

let d = ("<html>", 200, "OK", 12.34)

// let body = d.0
// let code = d.1
// let message = d.2
// let size = d.3

let (body, code, message, size) = d
body     // <html>
code     // 200
message  // OK
size     // 12.34

// 분해하고 싶지 않은 멤버는 _로 변경하여 처리할 수 있음
// ex) let (body, code, message, _) = d

 

4. Tuple Matching

switch 문의 경우 tuple matching 을 지원하기 때문에 같은 코드라도 if 문보다 더 간결하게 쓸 수 있습니다.

var resolution = (3840.0, 2160.0)

if resolution.0 == 3840 && resolution.1 == 2160 {
    print("4K")
}

// 위와 같은 코드를 switch 문으로 변경
switch resolution {
// interval matching 도 사용 가능
case (3840...4096, 2160):
    print("4K")
default:
    break
}

resolution = (1920.0, 1080.0)

switch resolution {
// wild card 문법도 사용 가능
case (_, 1080):
    print("1080p")
default:
    break
}

// value binding 활용
switch resolution {
case let(w, h) where w / h == 16.0 / 9.0:
    print("16:9")
default:
    break
}

// 결과
// 4K
// 4K
// 1080p
// 16:9

지금까지 Tuple 에 대해 알아보았습니다.

'swift > 문법' 카테고리의 다른 글

12. Swift 문법 - Strings and Characters 2  (0) 2020.10.19
11. Swift 문법 - Strings and Characters 1  (0) 2020.10.19
09. Swift 함수 - Closures  (0) 2020.10.17
08. Swift 문법 - Functions  (0) 2020.10.17
07. Swift 문법 - Optionals  (0) 2020.10.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함