Swift

[SWIFT] 튜플(Tuple)

동호다찌 2022. 11. 2. 12:00
반응형

전수열님의 GitBook을 기반으로 정리합니다.


튜플 (Tuple)

튜플Tuple은 어떠한 값들의 묶음입니다. 배열과 비슷하지만 배열과는 다르게 길이가 고정되어있습니다.
값에 접근할 때에도 [] 대신 .을 사용해요.

var coffeeInfo = ("아메리카노", 5100)
coffeeInfo.0 // 아메리카노
coffeeInfo.1 // 5100
coffeeInfo.1 = 5100

이 튜플의 파라미터에 이름을 붙일 수도 있어요.

var namedCoffeeInfo = (coffee: "아메리카노", price: 5100)
namedCoffeeInfo.coffee // 아메리카노
namedCoffeeInfo.price // 5100
namedCoffeeInfo.price = 5100

 

튜플의 타입 어노테이션은 이렇게 생겼어요.

var coffeeInfo: (String, Int)
var namedCoffeeInfo: (coffee: String, price: Int)

튜플을 조금 응용하면, 아래와 같이 여러 변수에 값을 지정할 수도 있습니다.

let (coffee, price) = ("아메리카노", 5100)
coffee // 아메리카노
price // 5100

튜플이 가진 값을 가지고 변수에 값을 지정할 때, 무시하고 싶은 값이 있다면 _ 키워드를 사용해서 할 수 있습니다.
아래 코드에서는 "라떼"라는 첫 번째 값을 무시합니다.

let (_, latteSize, lattePrice) = ("라떼", "Venti", 5600)
latteSize // Venti
lattePrice // 5600

 

물론, 튜플을 반환하는 함수도 만들 수 있습니다.

/// 커피 이름에 맞는 커피 가격 정보를 반환합니다. 일치하는 커피 이름이 없다면 `nil`을 반환합니다.

/// - parameter name: 커피 이름

/// - returns: 커피 이름과 가격 정보로 구성된 튜플을 반환합니다.
func coffeeInfo(for name: String) -> (name: String, price: Int)? {
  let coffeeInfoList: [(name: String, price: Int)] = [
    ("아메리카노", 5100),
    ("라떼", 5600),
  ]
  for coffeeInfo in coffeeInfoList {
    if coffeeInfo.name == name {
      return coffeeInfo
    }
  }
  return nil
}

coffeeInfo(for: "아메리카노")?.price // 5100
coffeeInfo(for: "에스프레소")?.price // nil

let (_, lattePrice) = coffeeInfo(for: "라떼")!
lattePrice // 5600
반응형

'Swift' 카테고리의 다른 글

[SWIFT] 프로토콜(Protocol)  (0) 2022.11.03
[SWIFT] Enum  (0) 2022.11.02
[SWIFT] 클래스와 구조체  (0) 2022.10.31
[SWIFT] 함수와 클로저  (0) 2022.10.28
[SWIFT] 옵셔널 (Optional)  (0) 2022.10.27