Swift guard ifadesi (Örneklerle)

Bu makalede, programınızın yürütme akışını kontrol etmek için guard deyimini kullanmayı öğreneceksiniz.

Swift If İfadesi, belirli koşula (boolean değer) göre eylemleri nasıl gerçekleştirebileceğinizi açıklar. Bu makalede, program akışını kontrol etmek ve daha basit ve temiz kod yazmak için guard ifadesinin if ifadesine göre faydalarını keşfedeceğiz.

Swift Guard Beyanı

Guard ifadesinin ana kullanımı, belirli koşullarda program kontrolünü kapsam dışına aktarmaktır. Bu ifadeler, ifadeleri belirli bir koşula (boolean değer) göre yürüten if ifadelerine benzer, ancak if'nin aksine, guard ifadeleri yalnızca belirli koşullar karşılanmadığında çalışır.

Ayrıca, koruma içindeki ifadeler kapsamdan çıkmalıdır. Bu nedenle, kullanıcı programı kontrol ifadelerine sahip return, break, continueveya throwbekçi deyimi sonunda.

Muhafız İfadesi Sözdizimi

 guard ifadesi else (// ifadeler // bir kontrol ifadesi içermelidir: dönüş, kesme, devam etme veya atma.) 
  • Burada ifade bir boole ifadesidir (ya trueda döndürür false).
  • İfade değerlendirilirse false, kod bloğunun içindeki ifadeler guardyürütülür.
  • İfade olarak değerlendirilirse true, kod bloğunun içindeki ifadeler guardyürütmeden atlanır.

Koruma ifadesi nasıl çalışır?

Not: bekçi ifade neticede bir kontrol deyimi içermelidir return, break, continueveya throw.

Örnek 1: Guard ifadesi nasıl çalışır?

Basit bir geçerli koruma ifadesi aşağıdaki gibidir:

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

Programı çalıştırdığınızda, çıktı:

 Koşul karşılandı

Yukarıdaki programda, koruma bir boole değeri true içerir (koşul karşılanmıştır). Koruma deyimleri yalnızca koşul karşılanmadığında çalıştığından, koruma içindeki ifade çalıştırılmaz. Bu yüzden print("Condition met")çalıştırılır ve ekranda Karşılanan Koşulu çıktılar .

Şimdi koşulu yanlış olarak değiştirelim:

Örnek 2: guard ifadesi kapsamdan çıkmalı

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

Yukarıdaki programda koruma durumu olarak değerlendirilir false. Yani, print("Condition not met")else içindeki ifade yürütülmelidir. Ancak, 'koruma' gövdesinin düşmeyebileceğini söyleyen bir hata alırsınız , kapsamdan çıkmak için bir 'dönüş' veya 'fırlatma' kullanmayı düşünün.

Basit bir kelime araçlarında hata mesajı, kullanmakta bekçi ekstresinden programı kontrol aktarmak gerekir return, break, continueveya throwifadeleri. Şimdilik kullanacağız return. Ve returnifade yalnızca bir işlevin içinde kullanılabildiğinden, yukarıdaki kodu Swift İşlevlerinde kaydıracağız.

Örnek 3: Bir işlev içindeki koruma ifadesi

Guard ifadesini Swift'deki bir işlevde şu şekilde kullanabiliriz:

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

Yukarıdaki programı çalıştırdığınızda, çıktı:

 Koşul karşılanmadı İşlev çağrısından sonra Merhaba 

Yukarıdaki programda, koruma koşulu değerlendirilir false, bu nedenle korumanın içindeki ifadeler yürütülür . İlk ifadenin print("Condition not met")çıkışları Durum karşılanmaması konsolda.

Ve ifade return, bir işlevin yürütülmesini sonlandırır print("Hello, after function call")ve işlev çağrısından sonraki ifade , konsoldaki işlev çağrısından sonra Hello çıktısını verir .

Örnek 4: İsteğe bağlı koruma

Swift Optionals'da if-letisteğe bağlı bir paketin paketini açmak için kullanıldığını gördük . Bununla birlikte, if-lettek bir avantajla isteğe bağlı bir paketin paketini açmak yerine koruma ifadesini de kullanabiliriz . İsteğe bağlı bir koruma ile sarmayı açmanın ana avantajı, sarmalanmamış if-letdeğişkenin kapsamını artırabilmemizdir.

Bunu aşağıdaki örnekte görelim:

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

Yukarıdaki programı çalıştırdığınızda, çıktı:

İsim sıfır. İşlenemiyor

Yukarıdaki programda, sarılmamış temp değerinin guard ifadesiyle tanımlanan kapsam dışında kullanıldığını görebilirsiniz. Ad isteğe bağlı olarak tanımlandığından ve nil değeri içerdiğinden, guard deyimi değeri sarmada başarısız olur.

Yani, guard'ın içindeki ifadeler, Name is nil basan çalıştırır . İşlenemez çıktı ve birlikte işlev sonlandırır returnaçıklamada. Yukarıdaki guard ifadesinin eşdeğer kodu if-else ifadesi şöyledir:

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

Yukarıdaki iki ifade hem geçerlidir hem de aynı işi yapar. Ancak if-let ifadesini kullanarak sarılmamış değeri if-let ifadesinin dışında kullanamazsınız. Ancak guard ifadesiyle sarılmamış değeri işlev boyunca kullanabilirsiniz.

Örnek 5: Birden çok koşulla koruma

Koruma ifadeleri, aşağıdaki gibi virgülle (,) ayrılmış birden çok koşulu da zincirleyebilir:

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

Yukarıdaki programı çalıştırdığınızda, çıktı:

Ad sıfır veya boş bir dizedir. İşlenemiyor

Yukarıdaki programda, koruma ifadesi virgülle ayrılmış iki koşul içerir.

İlk koşul , bizim durumumuzda let temp = namedönen bir isteğe bağlı olanı açar trueve ikinci koşul temp.count> 0, sarmalanmamış dizenin falseörneğimizde değerlendirilen 0'dan fazla karaktere sahip olup olmadığını kontrol eder .

Bu nedenle, guard deyimi içindeki deyim print("Name is nil or an empty string. Cannot process"), Name nil veya boş bir dizge çıktı veren bir deyimi yürütür . İşlenemez konsolda ve birlikte işlev sonlandırır returnaçıklamada.

Ilginç makaleler...