Ātrs apsardzes paziņojums (ar piemēriem)

Šajā rakstā jūs iemācīsities izmantot apsardzes paziņojumu, lai kontrolētu programmas izpildes plūsmu.

Swift Ja paziņojums apraksta, kā jūs varat veikt darbības, pamatojoties uz noteiktu nosacījumu (Būla vērtību). Šajā rakstā mēs izpētīsim apsardzes paziņojuma priekšrocības salīdzinājumā ar paziņojumu, lai kontrolētu programmas plūsmu un uzrakstītu vienkāršāku un tīrāku kodu.

Ātrs apsardzes paziņojums

Galvenais apsardzes paziņojuma izmantojums ir programmas vadības pārvietošana ārpus darbības jomas ar noteiktiem nosacījumiem. Šie apgalvojumi ir līdzīgi, ja paziņojumi, kas izpilda paziņojumus, pamatojoties uz noteiktu nosacījumu (Būla vērtību), bet atšķirībā no gadījuma, ja apsardzes paziņojumi darbojas tikai tad, ja nav izpildīti noteikti nosacījumi.

Turklāt paziņojumiem apsardzes iekšienē ir jāiziet no darbības jomas. Tāpēc mums ir lietotāja programma kontroles paziņojumiem return, break, continuevai throwbeigās, apsardzes paziņojumu.

Sardzes paziņojuma sintakse

 apsardzes izteiksme cits (// paziņojumos // jāiekļauj kontroles paziņojums: atgriezties, salauzt, turpināt vai mest.) 
  • Šeit, izteiksme ir Būla izteiksme (atgriež nu truevai false).
  • Ja izteiksme tiek novērtēta false, guardtiek izpildīti priekšraksti koda blokā .
  • Ja izteiksme tiek novērtēta true, koda blokā guardesošie priekšraksti tiek izlaisti no izpildes.

Kā darbojas apsardzes paziņojums?

Piezīme: No aizsarga paziņojuma beigās jābūt kontroles paziņojums return, break, continuevai throw.

1. piemērs: Kā darbojas apsardzes paziņojums?

Vienkāršs derīgs apsardzes paziņojums ir šāds:

 guard true else ( print("Condition not met") ) print("Condition met") 

Palaidot programmu, izeja būs:

 Nosacījums izpildīts

Iepriekš minētajā programmā guard satur būla vērtību true (nosacījums ir izpildīts). Tā kā apsardzes paziņojumi darbojas tikai tad, ja nosacījums nav izpildīts, paziņojums apsardzes iekšienē netiek izpildīts. Tāpēc ekrānā print("Condition met")tiek izpildīts un izejas nosacījums izpildīts .

Tagad mainīsim nosacījumu uz nepatiesu kā:

2. piemērs: apsardzes paziņojumam ir jāizslēdz darbības joma

 guard false else ( print("Condition not met") ) print("Condition met") 

Iepriekš minētajā programmā apsardzes stāvoklis tiek novērtēts līdz false. Tātad, paziņojums, kas print("Condition not met")atrodas citur, ir jāizpilda. Bet jūs saņemsiet kļūdu, sakot, ka "aizsargs" ķermenis var neizkrist, apsveriet iespēju izmantot "atgriezties" vai "mest", lai izietu no darbības jomas.

Kļūdas ziņojums vienkāršiem vārdu līdzekļus, jums ir nepieciešams pārvietot programmu kontroli no aizsarga aprēķinā, izmantojot return, break, continuevai throwpaziņojumus. Pagaidām mēs to izmantosim return. Tā kā returnpaziņojumu var izmantot tikai funkcijas iekšpusē, mēs augšējo kodu iesāksim Swift Funkcijās.

3. piemērs: apsardzes paziņojums funkcijas iekšpusē

Aizsardzības paziņojumu iekšpusē mēs varam izmantot funkcijā Swift kā:

 func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call") 

Palaidot iepriekš minēto programmu, izeja būs:

 Nosacījums nav izpildīts Sveiki pēc funkcijas izsaukuma 

Iepriekš minētajā programmā apsardzes stāvoklis tiek vērtēts false, tāpēc tiek izpildīti paziņojumi apsardzes iekšienē. Pirmais paziņojums print("Condition not met")izved nosacījumu , kas konsolē nav izpildīts .

Izraksts returnizbeidz funkcijas izpildi, un print("Hello, after function call")pēc funkcijas izsaukuma izpildes izraksta , kas konsolē izvada Sveiki pēc funkcijas izsaukuma .

4. piemērs: Aizsargs ar papildaprīkojumu

Mēs Swift Optionals esam redzējuši, kā izmantot, if-letlai atsaiņotu izvēles. Tomēr mēs varam izmantot arī apsardzes paziņojumu, if-letlai atdalītu izvēles iespēju ar vienu priekšrocību. Galvenā priekšrocība, atdalot izvēles iespēju ar aizsargu, if-letir tā, ka mēs varam palielināt neiesaiņotā mainīgā apjomu.

Apskatīsim šo piemēru zemāk:

 func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase() 

Palaidot iepriekš minēto programmu, izeja būs:

Nosaukums ir nulle. Nevar apstrādāt

Iepriekš minētajā programmā jūs varat redzēt, ka neiesaiņotā vērtība temp tiek izmantota ārpus sargu paziņojumā noteiktās darbības jomas. Tā kā nosaukums ir definēts kā neobligāts un tajā nav vērtības, apsardzes paziņojumā vērtība netiek atritināta.

Tātad, apsardzes iekšpusē esošie paziņojumi izpilda to, kurš drukātais vārds ir nulle. Nevar apstrādāt izvadē un pārtraukt funkciju ar returnpaziņojumu. Iepriekš minētā apsardzes paziņojuma ekvivalents kods ir:

 func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase() 

Iepriekš divi paziņojumi ir derīgi un veic vienu un to pašu darbu. Bet, izmantojot paziņojumu if-let, neizmantoto vērtību nevar izmantot ārpus paziņojuma if-let. Bet ar apsardzes paziņojumu jūs varat izmantot neiesaiņoto vērtību, izmantojot funkciju.

5. piemērs: aizsargs ar vairākiem apstākļiem

Apsardzes paziņojumi var arī saistīt vairākus nosacījumus, atdalot tos ar komatu (,) kā:

 func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()

Palaidot iepriekš minēto programmu, izeja būs:

Nosaukums ir nulle vai tukša virkne. Nevar apstrādāt

Iepriekš minētajā programmā apsardzes paziņojums satur divus nosacījumus, atdalot tos ar komatu.

Pirmais nosacījums let temp = nameatceļ izvēles iespēju, kas atgriežas truemūsu gadījumā, un otrais nosacījums temp.count> 0pārbauda, ​​vai neiesaiņotajā virknē ir vairāk nekā 0 rakstzīmju, kas tiek vērtētas falsemūsu piemērā.

Tāpēc paziņojums, kas atrodas apsardzes paziņojumā, izpilda paziņojumu, print("Name is nil or an empty string. Cannot process")kura izvades nosaukums ir nulle vai tukša virkne. Nevar apstrādāt konsolē un pārtraukt funkciju ar returnpaziņojumu.

Interesanti raksti...