Š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
, continue
vai throw
beigā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
true
vaifalse
). - Ja izteiksme tiek novērtēta
false
,guard
tiek izpildīti priekšraksti koda blokā . - Ja izteiksme tiek novērtēta
true
, koda blokāguard
esoš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
, continue
vai 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
, continue
vai throw
paziņojumus. Pagaidām mēs to izmantosim return
. Tā kā return
paziņ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 return
izbeidz 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-let
lai atsaiņotu izvēles. Tomēr mēs varam izmantot arī apsardzes paziņojumu, if-let
lai atdalītu izvēles iespēju ar vienu priekšrocību. Galvenā priekšrocība, atdalot izvēles iespēju ar aizsargu, if-let
ir 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 return
paziņ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 = name
atceļ izvēles iespēju, kas atgriežas true
mūsu gadījumā, un otrais nosacījums temp.count> 0
pārbauda, vai neiesaiņotajā virknē ir vairāk nekā 0 rakstzīmju, kas tiek vērtētas false
mū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 return
paziņojumu.