Hitre možnosti: kako jih uporabiti (z primeri)

V tem članku boste spoznali neobvezno, primere uporabe in neobvezno ravnanje v storitvi Swift.

V prejšnjem članku smo spoznali različne vrste podatkov, ki so na voljo v Swiftu, in opazili tudi, da spremenljivka ali konstanta teh vrst vsebuje privzeto vrednost.

Primer:

 naj nekajValue = Int () natisne (nekajValue) 

Ko zaženete program, bo rezultat:

 0

Vendar obstaja v Swiftu še en podatkovni tip, imenovan Izbirno, katerega privzeta vrednost je nična vrednost ( nil). Izbirno lahko uporabite, če želite, da spremenljivka ali konstanta ne vsebuje nobene vrednosti. Izbirni tip lahko vsebuje vrednost ali vrednost odsotna (nična vrednost).

Netehnično lahko neobvezno razmišljate kot škatlo za čevlje. Škatla za čevlje lahko vsebuje ali ne čevelj. Torej, že prej morate vedeti, ko dostopate do čevlja iz škatle.

Kako prijaviti neobvezno?

Lahko preprosto predstavlja vrsto podatkov kot neobvezno dodajo !ali ?na Type. Če neobvezna vrednost vsebuje vrednost, vrne vrednost kot Optional, če ne, pa vrne nil.

Primer 1: Kako razglasiti neobvezno v Swiftu?

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

Ko zaženete program, bo rezultat:

 nič nič

V zgornjem programu smo inicializirali neobvezni tip z uporabo ?in !. Oba načina veljata za ustvarjanje neobveznega, vendar obstaja ena velika razlika, ki jo bomo raziskali spodaj.

Če razglasite neobvezno Int, pomeni, da bo imela spremenljivka celoštevilčno vrednost ali nobena vrednost. Ker spremenljivki ni dodeljena nobena vrednost, lahko na zaslonu vidite oba printizhoda stavka nil.

Primer 2: Dodelitev in dostop do vrednosti iz neobvezne

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

Ko zaženete program, bo rezultat:

 Neobvezno (5) 5 

V zgornjem programu smo razglasili neobvezno Intvrsto in ji dodelili vrednost 5.

Kot lahko vidite, tiskanje neobveznega, ker print(someValue)vam ne da, 5ampak Optional(5). To je glede na obliko, kot je opisano zgoraj: Optional. Za dostop do njega potrebujemo mehanizem, imenovan odvijanje .

Neobvezno lahko odvijete tako, da dodate !znak na koncu spremenljivke / konstante, kot v naslednji vrstici print(someValue!). print(someValue!)odvije neobvezno in izpise 5na zaslonu.

Vendar ne pozabite, da je treba tovrstni mehanizem za odvijanje uporabljati le, če ste prepričani, da bo neobvezna vrednost zagotovo imela vrednost, ko boste dostopali do nje.

Primer 3: Izrecna razglasitev nepakiranega neobveznega

Upakirano neobvezno lahko ustvarite tudi kot:

 let someValue:Int! = 5 print(someValue) 

Ko zaženete program, bo rezultat:

 5.

V zgornjem programu Int!ustvari nepakirano neobvezno, ki samodejno odvije vrednost, ko dostopate do nje, tako da vam ni treba vsakič dodati !znaka.

Medtem ko uporabljate tovrstne možnosti, bodite prepričani, da bo spremenljivka vedno imela vrednost, ko boste dostopali do nje. Če tega ne storite, boste dobili usodno napako.

Primer 4: Usodna napaka pri dostopu do ničelno razpakirane neobvezne

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

Ko zaženete program, se prikaže zrušitev kot usodna napaka: nepričakovano je bilo ugotovljeno nič med razpakiranjem neobvezne vrednosti, ker koda unwrappedValue:Int = someValueskuša spremenljivki unsrappedValue dodeliti vrednost iz izbirne someValue.

Vendar je somevalue Optionalvrsta, ki vsebuje nilvrednost. Poskus dodelitve vrednosti nič spremenljivki unsrappedValue, ki ni neobvezna, bo povzročil zrušitev.

V tem primeru obstajajo različne tehnike, ki so razložene v nadaljevanju.

Neobvezno ravnanje

Če želite uporabiti vrednost neobveznega, ga je treba odviti. Boljši način za uporabo neobvezne vrednosti je pogojno razpakiranje in ne razstavljanje z uporabo !operaterja.

To je zato, ker pogojno odvijanje vpraša Preveri, ali ima ta spremenljivka vrednost? . Če je odgovor da, navedite vrednost, sicer bo obravnaval ničelni primer.

Nasprotno, force unrapping pravi, da ima ta spremenljivka vrednost, medtem ko jo uporabljate . Ko torej na silo odvijete spremenljivko, ki je nič, bo vaš program vrgel nepričakovano ugotovljeno nič, medtem ko bo odvijal neobvezno izjemo in zrušil . Nekatere tehnike pogojnega razpakiranja so razložene spodaj:

1. Če-izjava

Uporabite lahko stavek if in primerjate neobvezno z ničem, da ugotovite, ali neobvezno vsebuje vrednost ali ne. V stavku if lahko uporabite operator primerjave "enak" operatorju ( ==) ali operator "ni enak" !=.

Primer 5: Neobvezno ravnanje z izjavo if else

 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") ) 

Ko zaženete program, bo rezultat:

 ne vsebuje vrednosti Ima neko vrednost 0 

V zgornjem programu se koda znotraj stavka if izvrši, če neobvezno vsebuje vrednost, sicer se stavek znotraj bloka else izvede. Glavna pomanjkljivost neobveznega ravnanja s to tehniko je, da morate še vedno razviti vrednost iz neobveznega !operatorja uporabe .

2. Neobvezna vezava (če je dovoljena)

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

V zgornjem programu je spremenljivka someValue neobvezna in vsebuje nič vrednost. Operater ničelnega združevanja ne more razviti neobveznega, zato vrne defaultValue. Zato stavek print(unwrappedValue)v konzoli izpiše 5.

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

Ko zaženete program, bo rezultat:

 10.

Vendar je v zgornjem programu neobvezna spremenljivka someValue inicializirana z vrednostjo 10. Torej, operater ničelnega združevanja uspešno odvije vrednost iz someValue. Zato stavek someValue ?? defaultValuevrne 10 in stavek print(unwrappedValue)izpiše 10 v konzoli.

Zanimive Članki...