Menu
Coddy logo textTech

Busca Opcional

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 13 de 56.

Subscritos de dicionário sempre retornam um Optional: o valor quando a chave existe, nil quando não existe. O Swift força você a lidar com ambos os casos.

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

Três maneiras idiomáticas de lidar com o opcional. Escolha a que melhor se adapta à situação.

1. if let: trate ambos os ramos explicitamente:

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

2. coalescência nula (nil-coalescing) ??: forneça um valor padrão (fallback) inline:

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

3. subscript com valor padrão: resultado idêntico, mas o valor padrão também permanece se você escrever de volta para essa chave:

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

Desafio

Fácil

O dicionário prices é fornecido. Leia uma única linha de entrada: uma lista separada por vírgulas de itens que o usuário deseja comprar.

Para cada item, na ordem de entrada, procure-o em prices. Imprima uma linha por item:

  • <item> @ <price> quando o item estiver no dicionário
  • <item> not sold caso contrário

Após listar todos os itens, imprima uma linha final: Total: <sum>. Trate itens ausentes como custando 0 usando o operador de coalescência nula.

Para a entrada apple,bread,olive,milk, a saída é:

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

Folha de consulta

Subscritos de dicionário retornam um Optional — o valor se a chave existir, nil caso contrário.

1. if let — trate ambos os ramos:

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

2. Nil-coalescing ?? — forneça um valor padrão (fallback):

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

3. Subscript com default — valor padrão que também funciona na escrita:

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

Experimente você mesmo

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

// TODO: busca por item; imprimir '@ preço' ou 'não vendido'; somar com ?? 0
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo