Menu
Coddy logo textTech

Безопасный поиск

Часть раздела Логика и управление потоком путешествия по Swift на Coddy. Урок 13 из 56.

Индексы словаря всегда возвращают 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-coalescing ??: укажите запасное значение прямо в строке:

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

3. сабскрипт с default: результат идентичен, но default также сохраняется, если записать обратно в этот ключ:

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

Задание

Легко

Дан словарь prices. Прочитайте одну строку ввода: список items, которые пользователь хочет купить, разделённый запятыми.

Для каждого item в порядке ввода найдите его в prices. Выведите одну строку для каждого item:

  • <item> @ <price>, если item есть в словаре
  • <item> not sold в противном случае

После перечисления каждого item выведите одну последнюю строку: Total: <sum>. Считайте, что отсутствующие items стоят 0, используя оператор объединения с nil.

Для ввода 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