Kiired valikud: kuidas neid kasutada (koos näidetega)

Selles artiklis leiate lisateavet Swiftis lisavarustuse, selle kasutamise juhtude ja valikulise käitlemise kohta.

Eelmises artiklis õppisime Swiftis saadaolevate erinevate andmetüüpide kohta ning märkasime, et nende tüüpide muutuja või konstant deklareerib vaikeväärtust.

Näide:

 laske printida someValue = Int () (someValue) 

Programmi käivitamisel on väljund järgmine:

 0

Kuid Swiftis on veel üks andmetüüp nimega Valikuline, mille vaikeväärtus on nullväärtus ( nil). Võite kasutada valikulist, kui soovite, et muutuja või konstant selles väärtust ei sisaldaks. Valikuline tüüp võib sisaldada väärtust või väärtus puudub (nullväärtus).

Mittetehniliselt võite mõelda valikuliselt kingakarbina. Kingakarbis võib olla kinga või mitte. Nii et peaksite karbist kingale juurde minnes eelnevalt teadma.

Kuidas kuulutada vabatahtlikuks?

Saad esindavad andmed tüüp, nagu valikuline, lisades !või ?selle Type. Kui valikuline sisaldab selles väärtust, tagastab see väärtuse Optional, kui mitte nil.

Näide 1: Kuidas kuulutada Swiftis valikuliseks?

 var someValue:Int? var someAnotherValue:Int! print(someValue) print(someAnotherValue) 

Programmi käivitamisel on väljund järgmine:

 null pole

Ülaltoodud programmis oleme initsialiseerinud valikulise tüübi, kasutades ?ja !. Mõlemad viisid sobivad valikulise loomiseks, kuid allpool uurime ühte olulist erinevust.

Valikulise Int deklareerimine tähendab, et muutujal on kas täisarv või pole seda väärtust. Kuna muutujale pole väärtust määratud, näete ekraanil mõlemat printlause väljundit nil.

Näide 2: Väärtuse omistamine ja juurdepääs valikuliselt

 let someValue:Int? = 5 print(someValue) print(someValue!) 

Programmi käivitamisel on väljund järgmine:

 Valikuline (5) 5 

Eespool nimetatud programmis oleme kuulutanud Inttüübi valikuliseks ja omistanud selles väärtuse 5.

Nagu näete, print(someValue)ei anna valikulise as-i printimine teile 5vaid Optional(5). On sellisel kujul, nagu eespool kirjeldatud: Optional. Sellest pääsemiseks vajame mehhanismi, mida nimetatakse lahtipakkimiseks .

Valikulise saate lahti pakkida, lisades !muutuja / konstandi lõppu märgi nagu järgmisel real print(someValue!). print(someValue!)avab valikulised ja väljundid 5ekraanil.

Pidage siiski meeles, et sellist lahtipakkimismehhanismi tuleks kasutada ainult siis, kui olete kindel, et valikul on sellele juurdepääsemisel kindlasti väärtus.

Näide 3: Pakendamata valikuliseks kuulutamine

Võite luua ka pakkimata valikulise järgmiselt:

 let someValue:Int! = 5 print(someValue) 

Programmi käivitamisel on väljund järgmine:

 5

Eeltoodud programmis Int!loob pakendamata valikulise, mis loob väärtuse automaatselt lahti, kui sellele juurde pääsete, nii et teil pole vaja !märki alati lisada .

Selliste valikute kasutamisel olge kindel, et muutujale peab alati juurde pääsema väärtus. Kui te seda ei tee, saate fataalse vea krahhi.

Näide 4: Saatuslik viga nullile pakitud valikulise juurdepääsu korral

 var someValue:Int! var unwrappedValue:Int = someValue //crashes due to this line 

Programmi käivitamisel kuvatakse krahh fataalse veana: Valikulise väärtuse lahtipakkimisel leiti ootamatult null, kuna kood unwrappedValue:Int = someValueproovib väärtuse valikuliselt someValue määrata muutujale unrappedValue.

Kuid somevalue on Optionaltüüp, mis sisaldab nilväärtust. Nullväärtuse määramine muutujale uncrappedValue, mis pole valikuline, viib krahhini.

Selle juhtumi käsitlemiseks on erinevaid tehnikaid, mida on allpool selgitatud.

Valikuline käitlemine

Valikulise väärtuse kasutamiseks tuleb see lahti pakkida. Parem viis valikulise väärtuse kasutamiseks on pigem tingimuslik lahtipakkimine kui sundpakendamine !operaatori abil.

Seda seetõttu, et tingimuslikult lahtipakkimine küsib Kontrolli, kas sellel muutujal on väärtus? . Kui jah, siis andke väärtus, vastasel juhul käsitleb see nulljuhtumit.

Vastupidi, jõu tühjendamine ütleb, et sellel muutujal on väärtus, kui te seda kasutate . Seega, kui sunnite pakkuma muutuja, mis on null, loobub teie programm ootamatult leitud nulli, pakkudes valikulist erandit lahti ja jookseb kokku . Mõningaid tingimisi lahtipakkimise võtteid selgitatakse allpool:

1. If-avaldus

Võite kasutada if-lauset ja võrrelda valikulist nulliga, et teada saada, kas valikuline sisaldab väärtust või mitte. If-lauses saate kasutada võrdlusoperaatorit "võrdne" ( ==) või operaatorit "mitte võrdne" ( !=).

Näide 5: vabatahtlik käsitsemine if else avaldusega

 var someValue:Int? var someAnotherValue:Int! = 0 if someValue != nil ( print("It has some value (someValue!)") ) else ( print("doesn't contain value") ) if someAnotherValue != nil ( print("It has some value (someAnotherValue!)") ) else ( print("doesn't contain value") ) 

Programmi käivitamisel on väljund järgmine:

 ei sisalda väärtust Sellel on mingi väärtus 0 

Ülalolevas programmis käivitatakse if-lause sees olev kood, kui valikuline sisaldab väärtust, vastasel juhul käivitatakse lause teises plokis olev lause. Selle tehnika abil valikulise käsitlemise peamine puudus on see, et !operaatori abil peate ikkagi väärtuse valikulisest lahti pakkima .

2. Valikuline köitmine (kui lubatud)

Optional binding helps you to find out whether an optional contains a value or not. If an optional contains a value, that value is available as a temporary constant or variable. Therefore, optional binding can be used with if statement to check for a value inside an optional, and to extract that value into a constant or variable in a single action.

Example 5: Optional handling using if let statement

 var someValue:Int? var someAnotherValue:Int! = 0 if let temp = someValue ( print("It has some value (temp)") ) else ( print("doesn't contain value") ) if let temp = someAnotherValue ( print("It has some value (temp)") ) else ( print("doesn't contain value") ) 

When you run the program, the output will be:

 doesn't contain value It has some value 0 

In the above program, the code inside if statement executes if the optional contains a value. Otherwise the else block gets executed. The if-let statement also automatically unwraps the value and places the unwrapped value in temp constant. This technique has major advantage because you don't need to forcely unwrap the value although being certain an optional contains a value.

3. Guard statement

You can use guard to handle optionals in Swift. Don't worry if you don't know what guard is. For now, just think of guard as an if-else condition with no if block. If the condition fails, else statement is executed. If not, next statement is executed. See Swift guard for more details.

Example 6: Optional handling using guard-let

 func testFunction() ( let someValue:Int? = 5 guard let temp = someValue else ( return ) print("It has some value (temp)") ) testFunction() 

When you run the program, the output will be:

 It has some value 5

In the above program, the guard contains a condition whether an optional someValue contains a value or not. If it contains a value then guard-let statement automatically unwraps the value and places the unwrapped value in temp constant. Otherwise, else block gets executed and and it would return to the calling function. Since, the optional contains a value, print function is called.

4. Nil-coalescing operator

In Swift, you can also use nil-coalescing operator to check whether a optional contains a value or not. It is defined as (a ?? b). It unwraps an optional a and returns it if it contains a value, or returns a default value b if a is nil.

Example 7: Optional handling using nil-coalescing operator

 var someValue:Int! let defaultValue = 5 let unwrappedValue:Int = someValue ?? defaultValue print(unwrappedValue) 

When you run the program, the output will be:

 5

Ülalolevas programmis on muutuja someValue määratletud valikulisena ja see sisaldab nullväärtust. Null ühinemisoperaator ei suuda valikulist lahti pakkida, seega tagastab defaultValue. Seetõttu väljastab lause print(unwrappedValue)konsoolis 5 väljundit.

 var someValue:Int? = 10 let defaultValue = 5 let unwrappedValue:Int = someValue ?? defaultValue print(unwrappedValue) 

Programmi käivitamisel on väljund järgmine:

 10

Kuid ülaltoodud programmis initsialiseeritakse valikuline muutuja someValue väärtusega 10. Niisiis tühistab nullühendav operaator väärtus mõnest väärtusest. Seepärast someValue ?? defaultValuetagastab lause print(unwrappedValue)konsoolis 10 ja lause 10 väljundi.

Huvitavad Artiklid...