SORU
11 HAZİRAN 2015, PERŞEMBE


Swift 2 guard anahtar kelime

Swift 2 tanıtır çeşitli veri yapılandırılmış olduğundan emin olmak için kullanılabilecek guard anahtar kelime, gitmek için hazır. Gördüğüm bir örnek this website submitTapped bir işlevi gösterir:

func submitTapped() {
    guard username.text.characters.count > 0 else {
        return
    }

    print("All good")
}

Eğer guard kullanarak eski moda şekilde yapmak, if bir durumu kullanarak daha farklı bir şey olup olmadığını merak ediyorum. Basit bir kontrol ile mümkün olmayan avantajlar veriyor mu?

CEVAP
16 HAZİRAN 2015, Salı


this article okuma büyük faydalar kullanarak fark ettimGardiyan

Burada bir örnek ile koruma kullanımını karşılaştırmak:

Bu koruma olmadan parçasıdır:

func fooBinding(x: Int?) {
    if let x = x where x > 0 {
        // Do stuff with x
        x.description
    }

    // Value requirements not met, do something
}
  1. Burada tüm koşullar içinde istediğiniz kodu koyuyorsun

    Hemen bu sorun olmayabilir, ama ne kadar kafa karıştırıcı eğer karşılanması gereken çeşitli koşullar ile iç içe olsaydı olabilirdi ifadeleri çalıştırmadan önce tahmin edersiniz

Bu kadar temiz bir şekilde kontrolleri her önce, ve eğer bir araya geldi değilse çıkmak için. Bu ne durumları bu işlev çıkış yapacak kolay anlaşılmasını sağlar.

Ama şimdi bekçi kullanabiliriz ve bazı sorunları çözmek için mümkün olduğunu görebiliriz:

func fooGuard(x: Int?) {
    guard let x = x where x > 0 else {
        // Value requirements not met, do something
        return
    }

    // Do stuff with x
    x.description
}
  1. Yok kimse istemiyor musun durumu kontrol. Bu yine bir iddia etmeye benzer. Eğer bu koşul yerine değilse, gardiyanın başka deyimi işlev dışı tatili çalıştırın.
  2. Eğer durum geçerse, isteğe bağlı değişken burada otomatik olarak koruma kapsamında sizin için açtı. açıklama çağrıldı – bu durumda, fooGuard(_:) işlevi.
  3. Kötü durumlar için erken, işlevi daha okunabilir ve bakımı daha kolay hale denetleniyor

Bu aynı desen isteğe bağlı olmayan değerler için de geçerlidir:

func fooNonOptionalGood(x: Int) {
    guard x > 0 else {
        // Value requirements not met, do something
        return
    }

    // Do stuff with x
}

func fooNonOptionalBad(x: Int) {
    if x <= 0 {
        // Value requirements not met, do something
        return
    }

    // Do stuff with x
}

Eğer hala herhangi bir sorunuz varsa makalenin tamamını okuyabilirsiniz: Swift guard statement.

Toparlıyor

Ve son olarak, okuma ve eğer kullanırsanız herhangi bir optionals açmak koruyan buldum testi

bu açılmamış değerleri size geri kalanı kullanmak için etrafında kalmak kod bloğu

.

guard let unwrappedName = userName else {
    return
}

print("Your username is \(unwrappedName)")

Burada açılmamış değeri sadece blok içinde kullanılabilir olacaktır

if let unwrappedName = userName {
    print("Your username is \(unwrappedName)")
} else {
    return
}

// this won't work – unwrappedName doesn't exist here!
print("Your username is \(unwrappedName)")

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • MADFINGER Games a.s.

    MADFINGER Ga

    21 NİSAN 2009
  • Need for Speed

    Need for Spe

    8 ŞUBAT 2006