Optionale Suche
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 13 von 56.
Dictionary-Subskripte geben immer ein Optional zurück: den Wert, wenn der Schlüssel vorhanden ist, und nil, wenn er nicht vorhanden ist. Swift zwingt dich, 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ähle diejenige, die zur Situation passt.
1. if let: Behandle beide Zweige ausdrücklich:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. nil-coalescing ??: inline einen Fallback bereitstellen:
let p = prices["olive"] ?? 0 // 03. Subscript mit default: identisches Ergebnis, aber der Standardwert bleibt auch erhalten, wenn du in diesen Schlüssel zurückschreibst:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]Aufgabe
EinfachDas Wörterbuch prices ist vorgegeben. Lies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von Elementen, die der Benutzer kaufen möchte.
Schlage jedes Element in der Eingabereihenfolge in prices nach. Gib für jedes Element eine Zeile aus:
<item> @ <price>, wenn das Element im Wörterbuch enthalten ist- andernfalls
<item> not sold
Nachdem jedes Element aufgelistet wurde, gib eine letzte Zeile aus: Total: <sum>. Behandle fehlende Elemente mithilfe des Nil-Koaleszenzoperators als Kosten von 0.
Für die Eingabe apple,bread,olive,milk lautet die Ausgabe:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8Probier es selbst
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// TODO: Lookup pro Artikel; drucke '@ price' oder 'not sold'; 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 TrimSuchen in StringsAufteilen und ZusammenfügenTeilstrings ersetzenRückblick – Benutzernamen prüfen4Mengen
Mengen erstellenVereinigung und SchnittmengeSubtraktion und symmetrische DifferenzTeilmenge und ObermengeWiederholung – Tag-Filter7Projekt – Gewohnheitstracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteBereichsmethodenBereiche in SwitchRückblick – Kalender-Raster5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerketten von Map, Filter und ReduceRückblick – Wortstatistik3Wörterbücher
Wörterbücher deklarierenOptionale SucheWörterbücher aktualisierenWörterbücher durchlaufenWerte gruppierenRückblick – Inventar6Funktionen höherer Ordnung Teil 2
compactMapflatMapsorted(by:)Pipelines erstellenRückblick – BestenlisteÜbe selbstständig: Swift-Playground