Optionaler Lookup
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 13 von 56.
Dictionary-Subscripts geben immer ein Optional zurück: den Wert, wenn der Schlüssel existiert, nil, wenn er nicht existiert. Swift zwingt Sie dazu, beide Fälle zu behandeln.
let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p) // Optional(1)Drei idiomatische Möglichkeiten, mit dem Optional umzugehen. Wählen Sie diejenige, die zur Situation passt.
1. if let: behandle beide Zweige explizit:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. Nil-Coalescing-Operator ??: einen Standardwert direkt angeben:
let p = prices["olive"] ?? 0 // 03. Subscript mit Standardwert: identisches Ergebnis, aber der Standardwert bleibt auch erhalten, wenn Sie in diesen Schlüssel zurückschreiben:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]Aufgabe
EinfachDas Dictionary prices ist vorgegeben. Lies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von Artikeln, die der Benutzer kaufen möchte.
Suche für jeden Artikel in der Reihenfolge der Eingabe im Dictionary prices danach. Gib pro Artikel eine Zeile aus:
<item> @ <price>, wenn der Artikel im Dictionary enthalten ist<item> not soldandernfalls
Gib nach der Auflistung aller Artikel eine letzte Zeile aus: Total: <sum>. Behandle fehlende Artikel so, als würden sie 0 kosten, indem du den Nil-Coalescing-Operator verwendest.
Für die Eingabe apple,bread,olive,milk lautet die Ausgabe:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8Spickzettel
Dictionary-Subscripts geben ein Optional zurück — den Wert, wenn der Schlüssel existiert, nil, falls nicht.
1. if let — beide Zweige behandeln:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. Nil-Coalescing ?? — einen Fallback bereitstellen:
let p = prices["olive"] ?? 0 // 03. Subscript mit Standardwert — Fallback, der auch beim Schreiben funktioniert:
var counts = ["a": 2]
counts["b", default: 0] += 1 // ["a": 2, "b": 1]Probier es selbst
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// TODO: Suche pro Artikel; drucke '@ Preis' oder 'nicht verkauft'; Summe mit ?? 0
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken3Dictionaries
Dictionaries deklarierenOptionaler LookupDictionaries aktualisierenÜber Dictionaries iterierenWerte gruppierenZusammenfassung – Inventar6Funktionen höherer Ordnung Teil 2
compactMapflatMapsorted(by:)Pipelines erstellenZusammenfassung – Bestenliste