Sobes.tech
Junior

O que são opcionais e qual o papel deles na linguagem Swift?

sobes.tech IA

Resposta da IA

Opcional em Swift é um tipo que pode conter um valor ou não conter (ser nil).

Funções dos opcionais:

  • Gestão da ausência de valores (segurança nil).
  • Prevenção de erros de acesso a nil em tempo de execução (quedas).
  • Definição clara no código de onde um valor pode faltar.

Conceitos principais:

  • Declaração de um opcional: ValueType? ou Optional<ValueType>
  • Atribuição de nil: pode-se atribuir nil a um opcional.
  • Desembrulhamento forçado (!): extrai o valor se existir, caso contrário provoca um erro fatal.
  • Ligação opcional (if let, guard let): extrai de forma segura o valor se não for nil, criando uma constante ou variável temporária.
  • Cadeia opcional (?.): permite chamar métodos, aceder a propriedades ou índices de um opcional de forma segura.
  • Operador de fusão com nil (??): fornece um valor padrão se o opcional for nil.

Exemplos de uso:

// Declaração de um Int opcional
var age: Int?

// Atribuição de valor
age = 30

// Desembrulhamento forçado (não seguro se age == nil)
// let unwrappedAge = age!

// Ligação opcional com if let
if let currentAge = age {
    print("Idade: \(currentAge)") // Executa se age não for nil
} else {
    print("Idade desconhecida") // Executa se age for nil
}

// Cadeia opcional
struct Person {
    var name: String
    var address: Address?
}

struct Address {
    var street: String
}

var person: Person? = Person(name: "Alice", address: Address(street: "Main St"))

// Tentar obter a rua através de cadeia opcional
let streetName = person?.address?.street // streetName será String?

// Operador de fusão com nil
let displayedStreet = streetName ?? "Rua desconhecida"
print(displayedStreet) // Vai imprimir "Main St"