2016-06-27 4 views
1

Ich habe eine if/else-Anweisung.Bruch von einer if-Anweisung in den else-Abschnitt

if (something) { 
    //run if logic 
} else { 
    //run else logic 
} 

Während meiner if logic phase kann ich etwas finden, das mir den anderen Teil meiner if/else-Anweisung statt laufen macht möchten. Die Logikphase ist zu komplex, um nur in die anfängliche Bedingung something zu passen.

Gibt es etwas wie break;, das verwendet werden kann, um zum else Teil einer if/else-Anweisung zu springen.

Ich tue dies zur Zeit, aber ich mag nicht mit goto

if (something) { 
    //run if logic 
    if (somethingComplex) { 
     goto elseSomething; 
    } 
} else { 
    elseSomething: 
    //run else logic 
} 

Hinweis erneut, dass somethingElseComplex ein boolean Zustand, indem Sie einige komplexe Code zu groß/mehrzeiligen passen in meiner anfänglichen erreicht ist, wenn bedingt, sonst hätte ich das gerade gemacht: if (something && somethingComplex), und wenn ich etwas Complex vor dem ersten bedingten Aufruf berechnen, kann ich falsch-positive Ergebnisse bekommen. auf !something Werte

Antwort

1

In Objective-C, würde ich ein boolesches Flag vorher gesetzt verwenden und nicht if/else verwenden, sondern zwei separate if Aussagen, wie diese (dies ist Swift Code, aber es ist die gleiche Struktur):

var needToDoSomethingElseComplex = false 
if something { 
    // do stuff 
    if somethingComplex { 
     needToDoSomethingElseComplex = true 
    } 
} 
if !something || needToDoSomethingElseComplex { 
    // do something else complex 
} 

Aber echte Swift wenn Sie eine elegante Art und Weise geben, genau das zu tun, was Sie suchen - eine switch mit einem fallthrough:

switch something { 
case true: 
    print("hey") 
    if somethingComplex { 
     fallthrough 
    } 
    print("ho") 
case false: 
    print("ha") 
} 

In der obigen, Wenn something wahr ist, und wenn somethingComplex sich als wahr herausstellt, drucken wir "hey" und dann "ha", was genau der Fluss ist, nach dem Sie suchen.

+0

Dies ist keine genaue Antwort auf das, was ich verlange-aber ich denke, was ich verlange keine Antwort hat. Das heißt, das ist der nächste einfachste Weg imo; Danke! –

+1

Real Swift würde Ihnen einen tatsächlichen Weg geben, um das zu tun, was Sie wollen (ein 'Schalter' mit einem' Fallthrough'), aber Objective-C nicht. Ein weiterer Grund für Swift! Ich füge diesen Punkt meiner Antwort hinzu. – matt

+0

wow! Fallthrough ist ordentlich! Ich bin sehr versucht, zu swift zu wechseln. –

2

Es gibt keine Sprachfunktion abgesehen von goto, mit denen Sie die Steuerung willkürlich wie folgt übertragen können.

Der andere, bessere Weg, um von zwei Stellen im Code an einen anderen Ort zu gelangen, ist eine Prozedur: eine Methode oder Funktion. Ich denke, das Ausschließen des Inhalts des else Zweigs ist hier in Ordnung. Dann rufen Sie die neue Prozedur aus dem inneren if und dem else Zweig.

Sie könnten auch in Betracht ziehen, den Ausgangszustand zu refaktorisieren. Es sollte eine Möglichkeit geben, diese beiden Überprüfungen zu kombinieren, ohne sie in die Klammern eines if() Headers zu zerlegen.

1

Was ist mit ...

BOOL shouldGoToB = false; 
if (a) { 
    //run if logic 
    if (somethingComplex) { 
     shouldGoToB = YES; 
    } 
} 

if (!a || shouldGoToB) { 
} 
Verwandte Themen