กรณีที่รวดเร็วล้มลง


146

สวิฟท์มีคำแถลงหรือไม่ เช่นถ้าฉันทำสิ่งต่อไปนี้

var testVar = "hello"
var result = 0

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

เป็นไปได้หรือไม่ที่จะใช้รหัสเดียวกันสำหรับกรณี "หนึ่ง" และกรณี "สอง"

คำตอบ:


367

ใช่. คุณสามารถทำได้ดังนี้:

var testVal = "hello"
var result = 0

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

หรือคุณสามารถใช้fallthroughคำหลัก:

var testVal = "hello"
var result = 0

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

29
+1 ไม่เพียง แต่พูดถึงfallthroughแต่แนะนำให้ใช้หลายกรณี
Thilo

3
นี่เป็นการประนีประนอมที่ดีระหว่างอันตรายจากการล่มสลายของ C และการขาดการตกตัวอย่างเช่น C #
Alexander - Reinstate Monica

ไม่มีใครรู้วิธีที่จะตกจากกรณีที่เริ่มต้นหรือไม่? กรณี "สอง", ค่าเริ่มต้น: จะไม่รวบรวม
Zack Morris

2
ไม่เป็นไร. ฉันรู้ว่าการคอมเม้นท์เคสทำให้มันเป็นส่วนหนึ่งของเคสเริ่มต้นที่ตั้งไว้ดังนั้น: / * case "two", * / default: มีเอฟเฟกต์ที่ฉันกำลังมองหา
Zack Morris

1
@AlexanderMomchliov C # มีการล่มสลายอย่างชัดเจน
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")
}

คุณรู้วิธีที่จะผ่านไปยังกรณีเริ่มต้นหรือไม่?
MarcJames

5
ฉันเห็นด้วยกับ "case two" สำหรับฉันพฤติกรรมนี้แย่มาก เหตุใด Swift จะเรียกใช้งานเคสถัดไปแม้ว่าจะไม่เป็นจริง สิ่งนี้ทำให้คำสั่ง switch ไร้ประโยชน์โดยสิ้นเชิง ...
Andreas Utzinger

7
case "one", "two":
    result = 1

ไม่มีคำสั่งแบ่ง แต่กรณีมีความยืดหยุ่นมากขึ้น

ภาคผนวก:เนื่องจากไฟล์ Analog ชี้ให้เห็นจริง ๆ แล้วเป็นbreakข้อความใน Swift พวกเขายังคงสามารถใช้งานได้ในลูปแม้ว่าจะไม่จำเป็นในswitchคำสั่งเว้นแต่คุณจะต้องกรอกกรณีที่ว่างเปล่าเป็นอย่างอื่นเพราะไม่ได้รับอนุญาตกรณีที่ว่างเปล่า ตัวอย่างเช่นdefault: break.


6

นี่คือตัวอย่างสำหรับคุณที่เข้าใจง่าย:

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")
}

สรุป: ใช้fallthroughเพื่อดำเนินการกรณีถัดไป (เพียงหนึ่ง) เมื่อกรณีก่อนหน้านี้ที่มีการfallthroughแข่งขันหรือไม่


2

คำหลักfallthroughในตอนท้ายของกรณีทำให้เกิดพฤติกรรมการตกผ่านที่คุณกำลังมองหาและสามารถตรวจสอบค่าหลายค่าในกรณีเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.