În limbajul Swift, nicio variabilă standard nu poate conține valoarea nil (echivalentul null din alte limbaje). Pentru a reprezenta situațiile legitime în care o valoare poate lipsi, Swift pune la dispoziție tipul special Optional (notat cu semnul întrebării ? după tip, ex: String?), care funcționează ca un container ce poate conține fie o valoare împachetată, fie nil.
// 1. Declararea unui tip Optional
var emailUtilizator: String? = "ion.popescu@exemplu.ro"
// 2. Desfacere sigură cu guard let (Early Exit)
func trimiteNotificare(catre email: String?) {
// Dacă email-ul este nil, executăm blocul else și părăsim funcția
guard let emailValid = email, !emailValid.isEmpty else {
print("Eroare: Adresa de email lipsește sau este invalidă.")
return
}
// Aici 'emailValid' este de tip 'String' non-opțional și este accesibil în întreg corpul funcției
print("Notificare expediată cu succes la: \(emailValid)")
}
// 3. Desfacere cu if let (domeniu de vizibilitate limitat la bloc)
if let email = emailUtilizator {
print("Email găsit: \(email)")
} else {
print("Utilizatorul nu a specificat o adresă.")
}
// 4. Operatorul Nil-Coalescing (??) pentru valoare fallback implicită
let destinatar = emailUtilizator ?? "noreply@dexblog.ro"
print("Adresă fallback: \(destinatar)")
// 5. Optional Chaining (?.) pentru accesare profundă în proprietăți opționale
struct Profil { var bio: String? }
struct Utilizator { var profil: Profil? }
let user: Utilizator? = Utilizator(profil: Profil(bio: "Dezvoltator pasionat de iOS."))
let lungimeBio = user?.profil?.bio?.count ?? 0
print("Lungime bio: \(lungimeBio) caractere")
De ce să eviți Force Unwrapping (operatorul !)
Utilizarea operatorului de desfacere forțată ! (force unwrap) indică compilatorului să ignore protecțiile și să extragă direct valoarea. Dacă variabila conține nil la rulare, aplicația va genera o excepție fatală (fatal error: unexpectedly found nil while unwrapping an Optional value) și se va închide instantaneu. În codul de producție modern, folosește exclusiv guard let, if let sau ??.