Menu
Coddy logo textTech

İsteğe Bağlı Arama

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 13 / 56.

Sözlük indisleri her zaman bir Optional döndürür: anahtar mevcut olduğunda değeri, mevcut olmadığında ise nil döndürür. Swift sizi her iki durumu da ele almaya zorlar.

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

Optional ile başa çıkmanın üç idiyomatik yolu. Duruma uygun olanı seçin.

1. if let: her iki dalı da açıkça ele alın:

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

2. nil-coalescing ??: satır içinde bir yedek değer sağlayın:

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

3. varsayılan değerli indis (subscript): aynı sonuç, ancak o anahtara geri yazarsanız varsayılan değer de orada kalır:

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

Görev

Kolay

prices sözlüğü verilmiştir. Kullanıcının satın almak istediği öğelerin virgülle ayrılmış bir listesini içeren tek bir girdi satırı okuyun.

Girdi sırasına göre her bir öğe için prices sözlüğüne bakın. Her öğe için bir satır yazdırın:

  • Öğe sözlükte olduğunda <item> @ <price>
  • Aksi takdirde <item> not sold

Tüm öğeleri listeledikten sonra, son bir satır yazdırın: Total: <sum>. Eksik öğelerin maliyetini nil-coalescing operatörünü kullanarak 0 olarak kabul edin.

apple,bread,olive,milk girdisi için çıktı şöyledir:

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

Kopya kağıdı

Sözlük indisleri bir Optional döndürür — anahtar varsa değer, yoksa nil.

1. if let — her iki durumu da ele alın:

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

2. Nil-birleştirme (Nil-coalescing) ?? — bir yedek değer sağlayın:

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

3. Varsayılan değerli indis — yazma işleminde de çalışan yedek değer:

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

Kendin dene

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

// YAPILACAK: öğe bazlı arama; '@ fiyat' veya 'satılmıyor' yazdır; ?? 0 ile topla
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler