Menu
Coddy logo textTech

선택적 조회

Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨. 56개 중 13번째.

딕셔너리 첨자는 항상 Optional을 반환합니다. 키가 존재하면 값이 반환되고, 존재하지 않으면 nil이 반환됩니다. Swift는 두 경우를 모두 처리하도록 합니다.

let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p)                          // Optional(1)

Optional을 처리하는 세 가지 관용적인 방법입니다. 상황에 맞는 방법을 선택하세요.

1. if let: 두 분기를 모두 명시적으로 처리합니다:

if let p = prices["apple"] {
    print("apple costs \(p)")
} else {
    print("unknown")
}

2. nil 병합 ??: 인라인에서 대체값을 제공합니다:

let p = prices["olive"] ?? 0    // 0

3. default가 있는 서브스크립트: 결과는 동일하지만, 해당 키에 다시 값을 써도 기본값이 그대로 유지됩니다:

var counts = ["a": 2]
counts["b", default: 0] += 1   // counts == ["a": 2, "b": 1]
challenge icon

챌린지

쉬움

사전 prices가 주어집니다. 사용자가 구매하려는 항목의 쉼표로 구분된 목록인 입력 한 줄을 읽으세요.

각 항목을 입력 순서대로 prices에서 찾아보세요. 항목마다 한 줄을 출력하세요.

  • 항목이 사전에 있으면 <item> @ <price>
  • 그렇지 않으면 <item> not sold

모든 항목을 나열한 후 마지막 줄로 Total: <sum>을 출력하세요. nil 병합 연산자를 사용하여 누락된 항목의 가격은 0으로 처리하세요.

입력이 apple,bread,olive,milk이면 출력은 다음과 같습니다.

apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8

직접 해보기

let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")

// TODO: 항목별 조회; '@ price' 또는 'not sold' 출력; ?? 0으로 합산
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨

직접 연습해 보세요: Swift 플레이그라운드