Swift'in Kapsamlı Anahtar Beyanları için Noop


90

Swift, kapsamlı anahtar ifadeleri gerektirir ve her vakanın çalıştırılabilir koda sahip olması gerekir.

Bir 'anahtar' içindeki 'durum' etiketi en az bir çalıştırılabilir ifadeye sahip olmalıdır

Gerçekten bir şey yapmak istemediğiniz durumları ele almanın iyi bir yolunu bulan var mı? Oraya println () koyabilirim ama bu kirli bir his.


Yanıtlar:


151

Göre kitapta , kullanmak gerek breakyoktur:

Her vakanın kapsamı boş olamaz. Sonuç olarak, her durum etiketinin iki nokta üst üste işaretinden (:) sonra en az bir ifade eklemelisiniz. breakEşleşen bir vakanın gövdesinde herhangi bir kod yürütmeyi düşünmüyorsanız, tek bir ifade kullanın .


8
Oh, yine Swift minimum sürpriz yasasını
çiğniyor

10
@Jiaaro İhtiyaç break, dalların breakdüşmeyebileceğini gösterir.
RnMss

4
Basit bir ()tava da. Yine de breakişleri daha net hale getirdiği için tercih ederim . fallthrougİfadelerin üzerinden geçmek için anahtar kelimeyi kullanın .
2014 saat

1
Durumdaki tek satırı kısaca yorumlamak istediğinizde bu oldukça can sıkıcıdır default:. Bu iyi bir şey gibi görünmüyor. Ayrıca bunun, Swift'in yaptığı şey olmayan (yine de düşebileceğini bilmek güzel) c'nin düşme davranışını ima ettiğini kabul ediyorum.
Benjohn

1
Ve buraya sadece aranın çevreleyen bir döngüden erken
çıkmayacağından

12

Bir breakifade kullanabilirsiniz :

let vegetable = "red pepper"
var vegetableComment: String = "Nothing"
switch vegetable {
case "cucumber", "watercress":
    break // does nothing
case let x where x.hasSuffix("pepper"):
    vegetableComment = "Is it a spicy \(x)?"
default:
    vegetableComment = "Everything tastes good in soup."
}

Dokümanlardan değiştirilen örnek


3

Aşağıda boş ifade için bir seçenek var, ancak iyi bir çözüm olmayabilir. Python pass gibi bir ifade bulamıyorum

{}() 

anahtar durumu için mola daha iyi bir seçimdir.

break

1

breakDiğer cevaplarda bahsedilenlere ek olarak , ()işlem dışı bir ifade olarak da kullanıldığını gördüm :

switch 0 == 1 {
case true:
    break
case false:
    ()
}

Kullanım ()bulursanız breakkafa karıştırıcı ya da 3 karakter kaydetmek istiyorum.


0

Bulduğum en temiz çözüm, son ifadenizi varsayılan olarak anahtar durumuna eklemektir. Bu, breaktüm olası durumları kapsarken , ek veya diğer gereksiz ifadeler ihtiyacını ortadan kaldırır .

Örneğin:

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}

1
Merhaba @scottyhardy. Sorunun asıl amacı bu değil. Sorunun cevabını yazdınız: "Boş bir varsayılan durum eklemek zorunda kalmaktan nasıl kaçınılır" (veya bu satırlar boyunca bir şey). Senin durumunda aslında her durumda bir şeyler yapıyorsun. Ama diyelim ki hiçbir şey yapmak istemediğiniz bir vakanız (örneğin 2 numara gibi) var, o zaman aynı soruya geri dönüyorsunuz: bir anahtar durumunda istemediğimizde ne yapmalıyız? hiçbir şey yapmamak? Uzun lafın kısası: ara kullanın.
Enricoza

0

Kapsamlı anahtar durumu ifadelerinde hiçbir şey yapmayın:

Swift:

switch yourVariable {
case .someCase:
    break
}

SwiftUI:

switch yourVariable {
case .someCase:
    EmptyView() // break does not work with ViewBuilder
}

SwiftUI görünümlerinde break yerine EmptyView () kullanmak hatayı önler:

Kontrol akış deyimini içeren kapatma, işlev oluşturucu ViewBuilder ile kullanılamaz.

EmptyView () bir SwiftUI standart görünümüdür (Xcode 12, iOS 14 ile test edilmiştir) ve sizin tanımlanmanıza gerek yoktur.


0

Belirli bir durumu kontrol edebilirsiniz, s exhustiveile olmaya gerek yokswitch case

Bunun gibi bir numaranız olduğunu söyleyin,

enum Selection {
        case one
        case two
        case three
    }
var myCase = Selection.one
    

böyle kontrol edebilirsin

    if case .one = myCase {
        print("one")
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.