2017-02-16 139 views
1

我有3個屏幕的應用程序,屏幕1(類別)有多個按鈕,屏幕2(詳細信息)有更多按鈕,屏幕3基於按鈕是什麼顯示文本在前兩個屏幕中按下。快速減少if語句的長度

屏幕1上的按鈕保持不變,屏幕2上的按鈕因隱藏或顯示而異,具體取決於第一個屏幕上按下的按鈕。爲此,我現在有一個很長的陳述,我試圖找到減少它的方法。

可以幫助,但認爲我錯過了簡單的東西。

如果語句看起來類似於這樣:

if selectedCategory == "Option 1" { 

     if selectedDetail == "Detail A" { 

      selectedURL = optionOneData.detailA 

     } else if selectedDetail == "Detail C" { 

      selectedURL = optionOneData.detailC 

     } else if selectedDetail == "Detail E" { 

      selectedURL = optionOneData.detailE 

     } else if selectedDetail == "Detail G" { 

      selectedURL = optionOneData.detailG 

     } else if selectedDetail == "Detail J" { 

      selectedURL = optionOneData.detailJ 

     } else { 

      print("Invalid selection, something went wrong.") 

     } 

    } else if selectedCategory == "Option 2" { 

     if selectedDetail == "Detail B" { 

      selectedURL = optionTwoData.detailB 

     } else if selectedDetail == "Detail C" { 

      selectedURL = optionTwoData.detailC 

     } else if selectedDetail == "Detail D" { 

      selectedURL = optionTwoData.detailD 

     } else if selectedDetail == "Detail E" { 

      selectedURL = optionTwoData.detailE 

     } else if selectedDetail == "Detail F" { 

      selectedURL = optionTwoData.detail F 

     } else if selectedDetail == "Detail G" { 

      selectedURL = optionTwoData.detailG 

     } else if selectedDetail == "Detail H" { 

      selectedURL = optionTwoData.detailH 

     } else if selectedDetail == "Detail I" { 

      selectedURL = optionTwoData.detailI 

     } else if selectedDetail == "Detail J" { 

      selectedURL = optionTwoData.detailJ 

     } else { 

      print("Invalid selection, something went wrong.") 

     } 

不是我的實際代碼,改名變量的上下文。

這隻代表我所擁有的三分之一左右,所以我非常希望減少用於提高效率和可讀性的代碼量。

感謝。

+0

'Switch()'語句替代了long if-elseif-else條件語句。嘗試使用它。 – Priyal

+0

也可以創建你的選項,因爲'Enum'會使你的代碼更具可讀性,但你必須使用'switch'來分配數據和字符串 – Tj3n

+0

switch語句仍然很長,你的數據可能被保存在字典中或陣列很容易。 –

回答

2

您可以使用switch()語句:

var selectedCategory = "" 

switch selectedCategory { 

    case "Option 1" : 
    var selectedDetail = "" 

    switch selectedDetail { 

     case "Detail A" 
     selectedURL = optionOneData.detailA 

     case "Detail C" 
     selectedURL = optionOneData.detailC 
     .... 

     default: 
     print("Invalid selection, something went wrong.") 
    } 

case "Option 2": 
var selectedDetail = "" 

switch selectedDetail { 

     case "Detail A" 
     selectedURL = optionOneData.detailA 

     case "Detail C" 
     selectedURL = optionOneData.detailC 
     .... 

     default: 
     print("Invalid selection, something went wrong.") 
} 

default: 
     print("Invalid selection, something went wrong.") 
} 
+1

請注意,您可以在元組上使用單個開關,例如'switch(selectedCategory,selectedDetail){case(「Option2」,「DetailA」):...' – Grimxn

+0

是的,這是更多的'Swifty'這樣做的方式 – SahyadriChava

+0

最後爲開關提示,它更好地閱讀和反思如果我在按下這些按鈕時想要運行其他東西,這可能(我認爲)是最好的方法。謝謝! – mattFllr

0

從我在代碼中可以看到的Switch()聲明對您而言是最好的,而不是使用這個長的if-else聲明。這是這種情況下的最佳做法。

2

把你所有的選擇的細節,其網址字典,這樣

let selectionInfo = ["Detail A": optionOneData.detailA, "Detail E": optionOneData.detailE] 

,並以此來獲得選擇的網址。

selectedURL = selectionInfo[selectedDetail] 

如果selectedURL爲零,則沒有有效的選擇。