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.

Os subscritos de dicionários sempre retornam um Optional: o valor quando a chave existe, nil quando ela 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 caminhos explicitamente:

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

2. nil-coalescing ??: forneça um valor alternativo diretamente:

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

3. subscrito com valor padrão: resultado idêntico, mas o valor padrão também permanece se você gravar novamente nessa 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 de itens, separada por vírgulas, que o usuário deseja comprar.

Para cada item, na ordem da 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

Depois de listar todos os itens, imprima uma última linha: Total: <sum>. Considere que itens ausentes custam 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

Experimente você mesmo

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

// TODO: busca por item; imprima '@ price' ou 'not sold'; some 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

Pratique por conta própria: Playground de Swift