NEW: Join my free 100 Days of SwiftUI challenge today! >>

Înlănțuirea opționalelor

Să ai de-a face cu opționale poate părea greoi uneori, iar având mereu de desfăcut și verificat poate deveni atât de enervant încât ai putea fi tentat să folosești semne de exclamare și să desfaci forțat valori pentru a merge mai departe cu munca. Însă fii totuși atent: dacă desfaci forțat un opțional care nu are valoare, codul tău va crăpa.

Swift are două tehnici pentru a te ajuta să scrii cod mai puțin complicat. Prima se numește înlănțuirea opționalelor, și te lasă să rulezi codul doar dacă opționalul tău are o valoare. Scrie codul de jos în playground-ul tău pentru a începe:

func albumReleased(year: Int) -> String? {
    switch year {
    case 2006: return "Taylor Swift"
    case 2008: return "Fearless"
    case 2010: return "Speak Now"
    case 2012: return "Red"
    case 2014: return "1989"
    default: return nil
    }
}

let album = albumReleased(year: 2006)
print("The album is \(album)")

Asta va afișa "The album is Optional("Taylor Swift")" în panoul cu rezultate.

Dacă am fi vrut să convertim valoarea returnată de albumReleased() în litere mari (adică, "TAYLOR SWIFT" în loc de "Taylor Swift") am fi putut apela metoda uppercased() a acelui string. De exemplu:

let str = "Hello world"
print(str.uppercased())

Problema este că albumReleased() returnează un string opțional: ar putea returna un string sau ar putea să nu returneze nimic. Deci, ceea ce vrem noi cu adevărat este că "dacă primim un string să-l convertim în litere mari, altfel să nu facem nimic". Iar aici intră în scenă înlănțuirea opționalelor, pentru că ne oferă exact acel comportament.

Încearcă să înlănțuiești ultimele două linii de cod în felul acesta:

let album = albumReleased(year: 2006)?.uppercased()
print("The album is \(album)")

Observă că acolo este un semnul întrebării, iar aceea este înlănțuirea opționalelor: orice se află după semnul întrebării va rula doar dacă ce se află înainte are valoare. Asta nu influențează tipul de date a variabilei album, deoarece acea linie de cod acum va returna nil sau va returna numele albumului cu litere mari – este încă un string opțional.

Înlănțuirile tale de opționale pot fi cât de lungi ai nevoie, de exemplu:

let album = albumReleased(year: 2006)?.someOptionalValue?.someOtherOptionalValue?.whatever

Swift le va verifica de la stânga la dreapta până când va găsi nil, moment în care se va opri.

Operatorul de coalizare a valorii nule

Această simplă funcționalitate pe care o are Swift-ul face codul tău mai simplu si mai sigur, și iată totuși ce nume grandios de care mulți oameni se sperie. Păcat, pentru că acesta îți va face viața mai simplă dacă îți acorzi timp să îl înțelegi!

Ceea ce face este că te lasă să spui "folosește valoarea A dacă poți, dar dacă valoarea A este nil atunci folosește valoarea B." Asta este tot. Este folositoare în special pentru opționale, deoarece practic le face să nu mai fie opționale pentru că furnizezi o valoare B care nu este opțională. Deci, dacă A este opțională și are o valoare, aceasta este folosită (avem o valoare). Dacă A nu are nicio valoare, B este folosit (deci tot avem o valoare). În orice caz, sigur vom avea o valoare.

Pentru a îți oferi un context adevărat, încearcă să folosești acest cod într-un playground:

let album = albumReleased(year: 2006) ?? "unknown"
print("The album is \(album)")

Acele două semne de întrebare sunt de fapt operatorul de coalizare a valorii nule, iar în acest caz înseamnă "dacă albumReleased() a returnat o valoare atunci pune-o în variabila album, dar dacă albumReleased() a returnal nil atunci folosește 'unknown' în schimb."

Dacă te uiți în panoul cu rezultate acum, vei vedea afișat "The album is Taylor Swift" – gata cu opționalele. Asta deoarece Swift acum poate fi sigur că va primi o valoare, fie pentru că funcția returnează o valoare sau pentru că tu îi furnizezi "unknown". Ceea ce înseamnă că nu trebuie să desfaci nimic sau să riști ca codul să crape – îți este garantat că ai date adevărate cu care poți lucra, iar asta face codul să fie mai sigur și mai ușor de folosit.

SPONSORED Instabug helps you identify and resolve severe crashes quickly. You can retrace in-app events and know exactly which line of code caused the crash along with environment details, network logs, repro steps, and the session profiler. Ask more questions or keep users up-to-date with in-app replies straight from your dashboard. Instabug takes data privacy seriously, so no one sees your data but you! See more detailed features comparison and try Instabug's crash reporting SDK for free.

BUY OUR BOOKS
Buy Pro Swift Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift (Vapor Edition) Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Server-Side Swift (Kitura Edition) Buy Beyond Code

Was this page useful? Let us know!