دستور Switch

در Swift ساختاری به نام switch وجود دارد که به شما اجازه می‌دهد که با توجه به مقدار ثابت یک متغیر چندین انتخاب داشته باشید. دستور switch معادل دستور if تو در تو است با این تفاوت که در دستور switch متغیر فقط مقادیر ثابتی از اعداد، رشته‌ها و یا کاراکترها را قبول می‌کند. مقادیر ثابت مقادیری هستند که قابل تغییر نیستند. در زیر نحوه استفاده از دستور switch آمده است :

switch (testVar)
{
   case compareVal1:
       code to execute if testVar == compareVa11;
   case compareVa12:
       code to execute if testVar == compareVa12;
   .
   .
   .
   case compareVa1N:
       code to execute if testVer == compareVa1N;
   default:
       code to execute if none of the values above match the testVar;
}

ابتدا یک مقدار در متغیر switch که در مثال بالا testVar است قرار می‌دهید. این مقدار با هر یک از عبارتهای case داخل بلوک switch مقایسه می‌شود. اگر مقدار متغیر با هر یک از مقادیر موجود در دستورات case برابر بود کد مربوط به آن case اجرا خواهد شد. به این نکته توجه کنید که حتی اگر تعداد خط کدهای داخل دستور case از یکی بیشتر باشد، نباید از آکولاد استفاده کنیم. دستور switch یک بخش default دارد. این دستور در صورتی اجرا می‌شود که مقدار متغیر با هیچ یک از مقادیر دستورات case برابر نباشد. دستور default اجباری است و اگر از بدنه switch حذف شود، در برنامه خطا به وجود می آید. مکان این دستور باید در پایان دستورات دیگر باشد. به مثالی در مورد دستور switch توجه کنید :

 1: print("What's your favorite pet?")
 2: print("[1] Dog")
 3: print("[2] Cat")
 4: print("[3] Rabbit")
 5: print("[4] Turtle")
 6: print("[5] Fish")
 7: print("[6] Not in the choices")
 8: print("\nEnter your choice: ", terminator:"")
 9: 
10: var choice = Int(readLine()!)
11: 
12: switch (choice!)
13: {
14:     case 1:
15:         print("Your favorite pet is Dog.")
16:     case 2:
17:         print("Your favorite pet is Cat.")
18:     case 3:
19:         print("Your favorite pet is Rabbit.")
20:     case 4:
21:         print("Your favorite pet is Turtle.")
22:     case 5:
23:         print("Your favorite pet is Fish.")
24:     case 6:
25:         print("Your favorite pet is not in the choices.")
26:     default:
27:         print("You don't have a favorite pet.")
28: }
What's your favorite pet?
[1] Dog
[2] Cat
[3] Rabbit
[4] Turtle
[5] Fish
[6] Not in the choices

Enter your choice: 2
Your favorite pet is Cat.
What's your favorite pet?
[1] Dog
[2] Cat
[3] Rabbit
[4] Turtle
[5] Fish
[6] Not in the choices

Enter your choice: 99
You don't have a favorite pet.

برنامه بالا به شما اجازه انتخاب حیوان مورد علاقه‌تان را می‌دهد. به اسم هر حیوان یک عدد نسبت داده شده است. شما عدد را وارد می‌کنید و این عدد در دستور switch با مقادیر case مقایسه می‌شود و با هر کدام از آن مقادیر که برابر بود پیغام مناسب نمایش داده خواهد شد. اگر هم با هیچ کدام از مقادیر case ها برابر نبود دستور default اجرا می‌شود. یکی دیگر از ویژگیهای دستور switch این است که شما می‌توانید از دو یا چند مقدار برای مقایسه استفاده کنید. در مثال زیر اگر مقدار number عدد 1، 2 یا 3 باشد یک کد اجرا می‌شود. توجه کنید که مقادیر با استفاده از علامت , از هم جدا می‌شوند:

switch(number)
{
    case 1, 2, 3: 
        print("This code is shared by three values.")	  
}

همانطور که قبلاً ذکر شد دستور switch معادل دستور if else است. برنامه بالا را به صورت زیر نیز می‌توان نوشت :

if (choice! == 1)
{
   print("Your favorite pet is Dog.")
}
else if (choice! == 2)
{
   print("Your favorite pet is Cat.")
}
else if (choice! == 3)
{
   print("Your favorite pet is Rabbit.")
}
else if (choice! == 4)
{
   print("Your favorite pet is Turtle.")
}
else if (choice! == 5)
{
   print("Your favorite pet is Fish.")
}
else if (choice! == 6)
{
   print("Your favorite pet is not in the choice!s.")
}
else
{
   print("You don't have a favorite pet.")
}

کد بالا دقیقاً نتیجه‌ای مانند دستور switch دارد. دستور default معادل دستور else می‌باشد. گاهی اوقات لازم است که با وجود اجرا شدن یک case دوست دارید، بقیه case ها هم اجرا شوند. در این صورت می‌توانید از عبارت fallthrough استفاده کنید :

var number :Int = 10

switch(number)
{
    case 11, 10, 20:
        print("first case executed!")
    case 45:
        print("second case executed!")
    default:
        print("default statement")
}
first case executed!

در کد بالا از دستور fallthrough استفاده نشده، در نتیجه برنامه بعد از اجرای دستور case ی که صحیح است، از دستور Switch خارج می‌شود. اما در کد زیر از دستور fallthrough استفاده شده است و در نتیجه دستورات مربوط به بقیه case ها هم اجرا می‌شوند:

var number :Int = 10

switch(number)
{
    case 11, 10, 20:
        print("first case executed!")
        fallthrough
    case 45:
        print("second case executed!")
    default:
        print("default statement")
}
first case executed!
second case executed!

با استفاده از کلمه کلیدی where می توان یک شرط به دستور Switch اضافه کرد:

var number :Int = 10

switch number 
{
    case number where number >= 5 :
        print("The number is equal or greater than 10") 
    default:  
        print("The number is less than 10")
}
The number is equal or greater than 10

در کد بالا، با استفاده از این کلمه کلیدی گفته ایم که، اگر مقدار number بزرگتر یا مساوی عدد 5 بود، یک پیغام چاپ شود. در دستور Switch از عملگرهای محدوده به صورت زیر هم می توان استفاده کرد:

var number :Int = 10

switch number 
{
    case 0...10 :
         //Some Code
    case 11...20 :
        //Some Code
    default:  
         //Some Code
}