Valori opționale (elementele de bază ale sistemului rapid)

Valori opționale

Puteți utiliza valorile opționale în situațiile în care este posibil ca valoarea să nu fie valabilă. Valoarea opțională spune una din două lucruri:







"Am o valoare și este egală cu x"

"Nu am nici un sens"

Conceptul de valori opționale nu există în C sau în Obiectiv-C. Cel mai apropiat lucru în Obiectiv-C este abilitatea de a reveni la zero dintr-o metodă care returnează obiecte. nil pare să însemne că nu există un "obiect corect", dar acest lucru funcționează numai pentru obiecte, dar nu pentru structuri, tipuri de bază sau enumerări. Pentru aceste tipuri, metodele Obiectiv-C returnează de obicei o valoare specială (de exemplu, NSNotFound) pentru a indica absența unei valori. Această abordare presupune că codul care apelează metoda știe că există această valoare specială și că trebuie luat în considerare. Valorile opționale din Swift vă permit să specificați posibilitatea de a nu avea valoare pentru niciun tip, fără a fi nevoie de constante suplimentare.

Să dăm un exemplu. Tipul String are o metodă tont care încearcă să traducă conținutul unui șir într-o valoare intregă de tip Int. Cu toate acestea, nu fiecare linie poate fi convertită într-un număr întreg. Din linia "123" primești numărul 123, dar nu poți obține o valoare întregă din șirul "salut, lume".

Următorul exemplu folosește metoda toInt pentru a încerca să convertească un șir la Int:

// ConvertedNumber este acum de tip "Int?" (da, este Int cu semnul de întrebare), sau așa-numitul "opțional Int"

Din moment ce metoda toint nu functioneaza, ea returneaza un Int intuitiv, nu intregul Int. Este opțional Int scris ca Int? - semnul întrebării indică faptul că valoarea este opțională, adică variabilă sau constantă de tip Int? poate conține fie o valoare Int. sau nu conțin nici o valoare deloc. (Nu poate conține nimic altceva, adică Bool, String, etc. nu poate fi stocat în el.) Sau Int, sau nimic).







Puteți seta variabila opțională la o stare "fără valoare", atribuindu-i o valoare zero specială:

Pentru mai multe informații despre construcțiile condiționate, consultați capitolul "Controlul controlului" de pe site-ul nostru.

Încercarea de a utiliza. Pentru a obține valoarea în cazurile în care nu este în valoarea opțională, aceasta va provoca o eroare de rulare, adică eroare în timp ce aplicația se execută. Prin urmare, asigurați-vă întotdeauna că valoarea este conținută înainte de a utiliza semnul exclamării.

Bundle opțional

Puteți utiliza pachetul opțional pentru a afla dacă variabila opțională conține o valoare și dacă conține, apoi stocați-o într-o constantă sau o variabilă temporară. Un pachet opțional poate fi utilizat dacă și în timp ce pentru a verifica dacă valoarea este prezentă în variabila opțională și extrageți-o la o constantă sau o altă variabilă într-o singură acțiune. dacă și în timp ce sunt descrise în secțiunea "Controlul controlului" pe site-ul nostru.

Mânerele opționale sunt implementate după cum urmează:

Acest cod poate fi citit astfel:

"Dacă metoda opțională Int, returnată prin metoda eventNumber.toInt, conține o valoare, atunci creați o nouă constantă actualNumber cu valoarea care este acolo."

Dacă conversia a avut succes, actualNumber devine disponibil în prima ramură a expresiei if. Ea a fost deja inițializată cu o valoare, deci nu este nevoie să folosiți un semn de exclamare. În exemplul nostru, îl afișăm doar pe ecran.

Opțiuni optionale nefolosite (opțiuni optionale implicite)

După cum este descris mai sus, valorile opționale indică faptul că o constantă sau o variabilă nu poate avea nici un sens. Putem testa acest lucru folosind dacă și pentru a obține valoarea folosind un semn de exclamare sau un pachet opțional.

Uneori, din structura aplicației, puteți vedea că o variabilă sau o constantă opțională va avea întotdeauna o valoare după ce a fost instalată pentru prima dată. În aceste cazuri, este util să eliminați cumva necesitatea de a verifica și de a obține valoarea de fiecare dată când accesăm această variabilă.

Condițiile și variabilele opționale expandate în mod explicit sunt utile atunci când se știe că o valoare va fi prezentă constant într-o anumită variabilă sau constantă. Utilizarea principală a acestor variabile opționale în Swift este atunci când clasa este inițializată, așa cum este descris în secțiunea "Legături fără proprietari și implicit extinsă de proprietăți opționale"

O constantă sau o variabilă opțională expandată implicit este o variabilă obișnuită opțională în esența sa, dar poate fi folosită ca o opțiune inopțională, fără a trebui să "obțină" valoarea ei de fiecare dată când este accesată. Cea mai bună metodă de a privi iadul ăsta este un exemplu:







Trimiteți-le prietenilor: