Muhafızlar ne zaman kullanılır?
Birkaç UITextField öğesi veya başka bir kullanıcı girişi içeren bir görünüm denetleyiciniz varsa, içindeki metne (varsa!) Ulaşmak için isteğe bağlı olarak textField.text öğesinin paketini açmanız gerektiğini hemen fark edeceksiniz. isEmpty burada herhangi bir iyi yapmaz, herhangi bir giriş olmadan metin alanı sadece nil döndürür.
Böylece, paketini açıp sonunda bir sunucu uç noktasına gönderen bir işleve geçirdiğiniz bunlardan birkaçına sahip olursunuz. Sunucu kodunun sıfır değerlerle uğraşmasını veya yanlışlıkla geçersiz değerleri sunucuya göndermesini istemiyoruz, bu yüzden önce bu giriş değerlerini korumayla açacağız.
func submit() {
guard let name = nameField.text else {
show("No name to submit")
return
}
guard let address = addressField.text else {
show("No address to submit")
return
}
guard let phone = phoneField.text else {
show("No phone to submit")
return
}
sendToServer(name, address: address, phone: phone)
}
func sendToServer(name: String, address: String, phone: String) {
...
}
Sunucu iletişim fonksiyonumuzun isteğe bağlı olmayan Dize değerlerini parametre olarak aldığını ve böylece korumanın önceden açıldığını göreceksiniz. Açma işlemi biraz sezgisel değildir, çünkü bir blok içinde kullanmak için hangi değerleri açmaya izin verirse, açmayla alışmaya alışkınız. Burada guard ifadesinin ilişkili bir bloğu vardır, ancak aslında başka bir bloktur (yani, paketin açılması başarısız olursa yaptığınız şey), değerler ifadenin kendisiyle aynı içeriğe doğru kaydırılır.
// endişelerin ayrılması
Muhafızsız
Muhafız kullanmadan, bir kıyamet piramidine benzeyen büyük bir kod yığını ile sonuçlanırdık . Bu, formumuza yeni alanlar eklemek veya çok okunabilir kod oluşturmak için iyi ölçeklenmez. Girintiyi takip etmek zor olabilir, özellikle de her çataldaki diğer ifadelerle.
func nonguardSubmit() {
if let name = nameField.text {
if let address = addressField.text {
if let phone = phoneField.text {
sendToServer(name, address: address, phone: phone)
} else {
show("no phone to submit")
}
} else {
show("no address to submit")
}
} else {
show("no name to submit")
}
}
Evet, tüm ifadeleri virgülle ayrılmış tek bir ifadede bile birleştirebiliriz, ancak hangi ifadenin başarısız olduğunu anlamaya ve kullanıcıya bir mesaj sunma yeteneğini kaybederdik.
https://thatthinginswift.com/guard-statement-swift/