Sobes.tech
Junior

Ce sunt opționale și ce rol joacă în limbajul Swift?

sobes.tech AI

Răspuns de la AI

Opțional în Swift este un tip care poate conține o valoare sau nu (poate fi nil).

Rolul opționalelor:

  • Gestionarea absenței valorilor (siguranță nil).
  • Prevenirea erorilor de acces la nil în timpul execuției (crash-uri).
  • Definirea clară în cod a locurilor unde poate lipsi o valoare.

Concepte principale:

  • Declararea unui opțional: ValueType? sau Optional<ValueType>
  • Atribuirea lui nil: unui opțional i se poate atribui nil.
  • Dezambalare forțată (!): extrage valoarea dacă există, altfel provoacă o eroare fatală.
  • Legarea opțională (if let, guard let): extrage în mod sigur valoarea dacă nu este nil, creând o constantă sau variabilă temporară.
  • Lanțul opțional (?.): permite apelarea sigură a metodelor, accesarea proprietăților sau indexarea unui opțional.
  • Operatorul de coalescență cu nil (??): oferă o valoare implicită dacă opționalul este nil.

Exemple de utilizare:

// Declararea unui Int opțional
var age: Int?

// Atribuirea unei valori
age = 30

// Dezambalare forțată (nesigur dacă age == nil)
// let unwrappedAge = age!

// Legare opțională cu if let
if let currentAge = age {
    print("Vârsta: \(currentAge)") // Se execută dacă age nu este nil
} else {
    print("Vârsta necunoscută") // Se execută dacă age este nil
}

// Lanț opțional
struct Person {
    var name: String
    var address: Address?
}

struct Address {
    var street: String
}

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

// Încercarea de a obține strada prin lanț opțional
let streetName = person?.address?.street // streetName va fi String?

// Operatorul de coalescență cu nil
let displayedStreet = streetName ?? "Stradă necunoscută"
print(displayedStreet) // Va afișa "Main St"