case cepat jatuh

146

Apakah swift telah jatuh melalui pernyataan? misalnya jika saya melakukan hal berikut

var testVar = "hello"
var result = 0

switch(testVal)
{
case "one":
    result = 1
case "two":
    result = 1
default:
    result = 3
}

apakah mungkin untuk menjalankan kode yang sama untuk huruf "satu" dan huruf "dua"?

Bilal Syed Hussain
sumber

Jawaban:

367

Iya. Anda dapat melakukannya sebagai berikut:

var testVal = "hello"
var result = 0

switch testVal {
case "one", "two":
    result = 1
default:
    result = 3
}

Atau, Anda dapat menggunakan fallthroughkata kunci:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Cezary Wojcik
sumber
29
+1 untuk tidak hanya menyebutkan fallthrough, tetapi menyarankan untuk menggunakan multi-case
Thilo
3
Ini adalah kompromi yang baik antara bahaya jatuhnya C, dan kurangnya jatuhnya misalnya, C #
Alexander - Reinstate Monica
Adakah yang tahu bagaimana cara beralih dari case ke default? huruf "dua", default: tidak akan dikompilasi.
Zack Morris
2
Lupakan. Saya menyadari bahwa mengomentari case menjadikannya bagian dari set case default, jadi: / * case "two", * / default: memiliki efek yang saya cari.
Zack Morris
1
@AlexanderMomchliov C # secara eksplisit jatuh
Ian Newson
8
var testVar = "hello"

switch(testVar) {

case "hello":

    println("hello match number 1")

    fallthrough

case "two":

    println("two in not hello however the above fallthrough automatically always picks the     case following whether there is a match or not! To me this is wrong")

default:

    println("Default")
}
Glenn Tisman
sumber
Apakah Anda tahu cara untuk masuk ke kasus default?
MarcJames
5
saya setuju dengan "case two". Bagi saya perilaku ini menyebalkan. Mengapa Swift menjalankan kasus berikutnya meskipun itu tidak benar? Ini membuat pergantian pernyataan benar-benar tidak berguna ...
Andreas Utzinger
7
case "one", "two":
    result = 1

Tidak ada pernyataan istirahat, tetapi kasing jauh lebih fleksibel.

Tambahan: Seperti yang ditunjukkan File Analog, sebenarnya ada breakpernyataan di Swift. Mereka masih tersedia untuk digunakan dalam loop, meskipun tidak perlu dalam switchpernyataan, kecuali jika Anda harus mengisi kasing kosong, karena kasing kosong tidak diperbolehkan. Sebagai contoh: default: break.

nhgrif
sumber
6

Ini adalah contoh untuk Anda yang mudah dimengerti:

let value = 0

switch value
{
case 0:
    print(0) // print 0
    fallthrough
case 1:
    print(1) // print 1
case 2:
    print(2) // Doesn't print
default:
    print("default")
}

Kesimpulan: Gunakan fallthroughuntuk menjalankan kasus berikutnya (hanya satu) ketika yang sebelumnya sudah fallthroughcocok atau tidak.

Khuong
sumber
2

Kata kunci fallthroughdi akhir case menyebabkan perilaku fall-through yang Anda cari, dan beberapa nilai dapat diperiksa dalam satu case.

Russell Borogove
sumber