В тази статия ще се научите да използвате инструкция за защита, за да контролирате потока на изпълнението на вашата програма.
Swift If Statement описва как можете да извършвате действия въз основа на определено условие (булева стойност). В тази статия ще проучим предимствата на инструкцията за защита над оператора if, за да контролираме потока на програмата и да напишем по-опростен и изчистен код.
Изявление на бързата гвардия
Основното използване на декларацията за защита е да се прехвърли управлението на програмата извън обхвата при определени условия. Тези изрази са подобни на операторите if, които изпълняват изрази въз основа на определено условие (булева стойност), но за разлика от if, изразите на защитата се изпълняват само когато определени условия не са изпълнени.
Освен това изявленията вътре в охраната трябва да излязат от обхвата. Ето защо, ние трябва да се контрол на потребителя програма изявления return
, break
, continue
или throw
в края на отчета за охрана.
Синтаксис на изявление на гвардия
гвардиен израз else (// изявления // трябва да съдържат контролен израз: връщане, прекъсване, продължаване или хвърляне.)
- Тук изразът е булев израз (връща или
true
илиfalse
). - Ако изразът се изчислява
false
,guard
се изпълняват изрази вътре в кодовия блок на . - Ако изразът се изчислява
true
, изразите вътре в кодовия блок наguard
се пропускат от изпълнение.
Как работи изявлението на охрана?
Забележка: В края на отчета за охрана трябва да съдържа изявление, контрол return
, break
, continue
или throw
.
Пример 1: Как работи изявлението на защитата?
Проста валидна декларация за охрана е както по-долу:
guard true else ( print("Condition not met") ) print("Condition met")
Когато стартирате програмата, изходът ще бъде:
Условието е изпълнено
В горната програма защитата съдържа булева стойност true (условието е изпълнено). Тъй като инструкциите за защита се изпълняват само когато условието не е изпълнено, изявлението вътре в защитата не се изпълнява. Ето защо print("Condition met")
се изпълняват и изходи Състояние срещнаха на екрана.
Сега нека променим условието на false като:
Пример 2: инструкцията за охрана трябва да излезе от обхвата
guard false else ( print("Condition not met") ) print("Condition met")
В горната програма състоянието на защитата оценява на false
. Така че, изявлението print("Condition not met")
вътре в else трябва да се изпълни. Но ще получите грешка, като казвате , че тялото на "охрана" може да не пропадне, помислете дали да не използвате "return" или "хвърляне" за излизане от обхвата.
Съобщението за грешка с прости думи означава, че трябва да прехвърли контрола програма от отчета за охрана с помощта на return
, break
, continue
или throw
изявления. Засега ще използваме return
. И тъй като return
операторът може да се използва само във функция, ние ще увием горния код в бързи функции.
Пример 3: инструкция за защита вътре във функция
Можем да използваме инструкцията за защита вътре във функция в Swift като:
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")
след изпълнението на извикването на функция, което извежда Hello след извикване на функция в конзолата.
Пример 4: Пазач с опционални
Видяхме в Swift Optionals използването на 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()
Когато стартирате горната програма, изходът ще бъде:
Името е нула. Не може да се обработи
В горната програма можете да видите, че разгънатата стойност на температурата се използва извън обхвата, определен от израза на охрана. Тъй като името е дефинирано по избор и съдържа стойност нула, операторът на защитата не успява да разгъне стойността.
И така, изявленията вътре в guard else изпълняват кой отпечатва Name е нула. Не може да обработи в изхода и прекратява функцията с return
оператор. Еквивалентният код на горното изражение за защита if-else е:
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()
Забележете, че по-горе две твърдения са валидни и вършат една и съща работа. Но използвайки оператора if-let, не можете да използвате разгънатата стойност извън инструкцията if-let. Но с инструкция за защита можете да използвате разгънатата стойност през функцията.
Пример 5: Защита с множество условия
Операторите на Guard също могат да свържат множество условия, разделени със запетая (,) като:
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")
който извежда Name е nil или празен низ. Не може да се обработи в конзолата и прекратява функцията с return
оператор.