2017-02-16 26 views
1

Ich habe eine Anwendung mit 3 Bildschirmen, Bildschirm 1 (Kategorien) hat eine Reihe von Tasten, Bildschirm 2 (Details) hat mehr Tasten und Bildschirm 3 zeigt Text basierend auf welcher Schaltfläche war in den vorherigen 2 Bildschirmen gedrückt.Verringerung der Länge der if-Anweisung in swift

Die Tasten auf Bildschirm 1 bleiben gleich, die Tasten auf Bildschirm 2 variieren mit einigen versteckten oder angezeigten, je nachdem, welche Taste auf dem ersten Bildschirm gedrückt wurde. Zu diesem Zweck habe ich jetzt eine sehr lange if-Aussage und ich versuche Wege zu finden, sie zu reduzieren.

Kann helfen, aber denke, ich vermisse etwas Einfaches.

If-Anweisung zu diesem recht ähnlich sieht:

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

     } 

nicht mein eigentlicher Code, umbenannt Variablen für Kontext.

Dies entspricht nur etwa 1/3 von dem, was ich habe, also bin ich daran interessiert, die Menge an Code zu reduzieren, der effizienter und lesbarer ist.

Danke.

+0

'Switch()' Anweisungen sind der Ersatz von langen 'if-elseif-else' bedingten Anweisungen. Versuche es zu benutzen. – Priyal

+0

Erstellen Sie auch Ihre Option als 'Enum' wird Ihren Code viel lesbarer machen, noch müssen Sie 'switch' verwenden, um Daten und String zuzuweisen – Tj3n

+0

Eine switch-Anweisung wäre immer noch ziemlich lang, Ihre Daten könnten wahrscheinlich in einem Wörterbuch gespeichert werden Array ganz einfach. –

Antwort

2

können Sie switch() Anweisung wie:

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

Hinweis: Sie könnten einen einzigen Schalter am Tupel verwenden, z. 'switch (selectedCategory, selectedDetail) {case (" Option2 "," DetailA "): ...' – Grimxn

+0

Ja, das ist mehr 'Swifty' Weg, – SahyadriChava

+0

Am Ende für Switch zu wechseln, liest es besser und bei Reflexion Wenn ich jemals wollte, dass etwas anderes zu laufen, wenn diese Tasten gedrückt werden, ist dies wahrscheinlich (denke ich) der beste Weg, es zu tun. Vielen Dank! – mattFllr

0

Von was ich in Ihrem Code sehen kann, wäre eine Switch() Aussage die beste für Sie, anstatt diese langen if-else Aussagen zu verwenden. Es ist eine Best Practice in diesen Situationen.

2

alle Detail Ihre Auswahl halten und die entsprechende URL im Wörterbuch, wie diese

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

und verwenden diese ausgewählte URL zu erhalten.

selectedURL = selectionInfo[selectedDetail] 

Wenn selectedURL null ist, dann gibt es keine gültige Auswahl.

Verwandte Themen