Изјава брзе страже (са примерима)

У овом чланку ћете научити да користите изјаву чувара за контролу тока извршавања вашег програма.

Изјава Свифт Иф описује како можете извршити радње на основу одређеног услова (логичка вредност). У овом чланку ћемо истражити предности изјаве гард над наредбом иф за контролу протока програма и писање једноставнијег и чистијег кода.

Изјава брзе страже

Главна употреба изјаве о заштити је преношење контроле програма изван опсега под одређеним условима. Ови изрази су слични изразима иф који извршавају изразе на основу одређеног услова (логичка вриједност), али за разлику од иф, изрази чувара раде само када одређени услови нису испуњени.

Штавише, изјаве унутар страже морају изаћи из опсега. Стога, морамо да изјаве контроле корисника програма return, break, continueили throwна крају изјаве страже.

Синтакса Изјаве страже

 израз чувара елсе (// изрази // морају садржати контролни израз: повратак, прекид, наставак или бацање.) 
  • Овде је израз логички израз (враћа или trueили false).
  • Ако се израз процењује на false, guardизвршавају се изрази унутар блока кода од .
  • Ако се израз процењује на true, наредбе унутар блока кода guardпрескачу се из извршавања.

Како функционише изјава чувара?

Напомена: Крај изјаве страже мора да садржи изјаву контроле return, break, continueили throw.

Пример 1: Како делује изјава чувара?

Једноставна валидна изјава чувара је као доле:

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

Када покренете програм, излаз ће бити:

 Услов испуњен

У горњем програму, чувар садржи логичку вредност тачно (услов је задовољен). Будући да се изјаве заштитника покрећу само када услов није испуњен, изјава унутар заштите не извршава се. Због тога print("Condition met")се извршава и на екран излази Услов испуњен .

Сада променимо услов на фалсе као:

Пример 2: изјава чувара мора да изађе из опсега

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

У горе наведеном програму стање чувара процењује се на false. Дакле, изјава print("Condition not met")унутар елсе треба да се изврши. Али добићете грешку говорећи да тело 'чувара' можда неће пропасти, размислите о употреби 'ретурн' или 'бацања' да бисте изашли из опсега.

Порука о грешци у једноставним средствима речи, треба да пренесе контролу програма из изјаве страже користећи return, break, continueили throwизјаве. За сада ћемо користити return. А с обзиром returnда се наредба може користити само унутар функције, умотаћемо горњи код у Свифт функције.

Пример 3: исказ чувара унутар функције

Изјаву чувара можемо користити унутра у функцији у Свифту као:

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

Када покренете горњи програм, излаз ће бити:

 Услов није испуњен Здраво након позива функције 

У горе наведеном програму, стање заштитника процењује на false, стога се извршавају изрази унутар заштитника. Прва изјава print("Condition not met")даје Услов није испуњен у конзоли.

А наредба returnзавршава извршавање функције и наредба print("Hello, after function call")након извршења позива функције која у конзоли даје Хелло након позива функције .

Пример 4: Стража са опционалима

У компанији Свифт Оптионалс видели смо употребу if-letодмотавања опционалног. Међутим, можемо користити и изјаву чувара уместо if-letза одмотавање опционог са једном предношћу. Главна предност одмотавања опционог са штитником уместо је у if-letтоме што можемо повећати опсег одмотане променљиве.

Погледајмо ово у доњем примеру:

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

Када покренете горњи програм, излаз ће бити:

Име је нил. Није могуће обрадити

У горе наведеном програму можете видети да се распакована вредност привремене вредности користи изван опсега дефинисаног наредбом гарде. Будући да је име дефинисано необавезно и садржи нил вриједност, израз наредбе не успијева отпакирати вриједност.

Дакле, изјаве унутар чувара елсе извршавају који исписује Наме је нил. Не може се обрадити у излазу и завршава функцију returnизразом. Еквивалентни код горе наведене изјаве чувара иф-елсе је:

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

Обавештење изнад две изјаве су валидне и раде исти посао. Али коришћењем наредбе иф-лет не можете користити нераспаковану вредност изван наредбе иф-лет. Али са наредбом чувара можете искористити расмотану вредност кроз оут функцију.

Пример 5: Стража са више услова

Изјаве чувара могу такође повезати више услова раздвојених зарезом (,) као:

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

Када покренете горњи програм, излаз ће бити:

Име је нил или је празан низ. Није могуће обрадити

У горе наведеном програму, изјава чувара садржи два услова одвојена зарезом.

Први услов let temp = nameотвара необавезно које се trueу нашем случају враћа, а други услов temp.count> 0проверава да ли неразмотани низ има више од 0 знакова, што вреднује falseу нашем примеру.

Према томе, наредба унутар наредбе чувара извршава наредбу print("Name is nil or an empty string. Cannot process")која даје име је нил или празан низ. Не може се обрадити у конзоли и завршава функцију returnизразом.

Занимљиви Чланци...