Wie kann ich mit goto in einem switch-statement in Objective-C?
In meinem code muss ich in der Lage zu springen (goto) zu einem anderen Fall innerhalb der gleichen switch-Anweisung. Gibt es eine Möglichkeit, dies zu tun?
Mein code ist so etwas wie dies: (Es ist eine Menge code, den ich nur verlassen Sie es alle aus)
switch (viewNumber) {
case 500:
//[...]
break;
case 501:
//[...]
break;
.
.
.
.
.
case 510:
//[...]
break;
default:
break;
}
Vielen Dank für Ihre Zeit!
-Jeff
Nicht, das wäre sehr schlecht Codierung der Praxis.
Sind Sie auf der Suche nach, wenn man Wert trifft oder die andere, Sie laufen beide der gleiche Fall von code? Wenn dem so ist, können Sie nur fallen durch die korrekte groß-und Kleinschreibung.
bitte loszuwerden, alle das zusätzliche Klammern 🙁
Sind Sie auf der Suche nach, wenn man Wert trifft oder die andere, Sie laufen beide der gleiche Fall von code? Wenn dem so ist, können Sie nur fallen durch die korrekte groß-und Kleinschreibung.
bitte loszuwerden, alle das zusätzliche Klammern 🙁
InformationsquelleAutor Jeff | 2009-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist in der Regel sehr schlechte Praxis, bedingungslos zu springen, wie Sie gefragt haben.
Ich denke, eine besser lesbare/wartbare Lösung wäre den gemeinsamen code in eine Methode und mehrere Fälle rufen Sie die Methode.
Wenn Sie wirklich wollen, können Sie
goto
etwas zu tun wie:Anmerkung: ich habe nur die code-Beispiel von oben, um Ihre Frage zu beantworten. Jetzt fühle ich mich so schmutzig, ich könnte haben zu kaufen einige Schlechte Code-Offsets.
Also diese Methode muss enorm sein! Entfernen Sie den code aus dem
case
Aussagen und setzen Sie in anderen Methoden könnte die Dinge einfacher zu Lesen. Auch, wenn man eine Feste Anzahl von Tasten, man konnte direkt ordnen Sie jede Taste, um seine eigene Methode der Verwendung von target-action.Die Art und Weise, die ich verwendet zu haben, es war eine separate Methode für jeden der Fälle und in der IB alle buttons wurden mit dem "IBAction", aber mein Chef fühlt, dass der code wäre "zuverlässiger, eleganter und schneller laufen" wenn ich eine Switch-Anweisung anstelle von separaten Methoden. Also Ihr sagen, es wäre besser, verwenden von unterschiedlichen Methoden wieder? Auch ich habe gehört, vor, dass "goto" ist schlecht zu bedienen...weißt du, warum es schlecht ist?
Es gibt Unmengen von Fragen, diskutieren Sie springen auf SO (stackoverflow.com/search?q=goto+bad). Ich denke, der Schalter ist viel weniger elegant, vor allem, wenn einige der Tasten nicht im Zusammenhang in irgendeiner Weise. Es ist sehr viel schwieriger zu Lesen, da es so viel code in einem Ort, der nicht im Zusammenhang und für jede Taste drücken, die Sie ausführen müssen, um durch eine große Anzahl von vergleichen zum finden der richtige case-block. IMO, es ist viel besser, die Schaltfläche rufen Sie einfach den code, die es braucht, um als Durchlauf durch einen Schalter "filter" wie diese.
Anstatt zu brechen Sie in separaten Methoden, mit denen Sie Draht-individuell der beste Ansatz könnte gut sein, lassen Sie die Methode, die Sie haben (also nur eine Punkt-zu-Draht) aber wie andere sind, was darauf hindeutet, nehmen Sie alle den gemeinsamen code und setzen, dass in einer Methode rufen Sie aus der switch-Anweisung.
InformationsquelleAutor Ben S
Anstatt
goto
, umgestalten von code, so dass die zwei (oder mehr) Fällen, dass die Nutzung von gemeinsamen code-stattdessen nennen Sie es in eine gängige Methode.Etwas wie:
Es wäre nicht das Ende der Welt zu verwenden
goto
, aber es ist eine schlechte Praxis.Den praktischen Grund für die Vermeidung der Verwendung von
goto
ist, dass Sie suchen, durch Ihreswtich-case
Baum zu finden, dassgoto
label.Wenn Ihr switch-Logik verpasst, Sie haben eine schmutzige situation auf Ihre Hände.
Wenn Sie ziehen die gemeinsamen code zu seiner eigenen Methode, der code ist einfacher zu Lesen, zu Debuggen und zu erweitern.
InformationsquelleAutor Alex Reynolds
Sollten Sie wahrscheinlich versuchen, ändern Sie Ihren code wie ein rekursiver Aufruf oder nur Faktor die gemeinsamen Sachen und rufen Sie eine separate Funktion. Aber als fix und schnelle Antwort auf Ihre Frage, Sie könnten ein Etikett, bevor Sie Ihre Schalter, und gehe es, wie so
Nicht sicher, ob der Objective-C-syntax hier, aber Sie könnten auch versuchen, eine variation davon
halten auf der Schleife, bis die viewNumber ändert sich nicht mehr. Dies ist immer noch ziemlich viel nur hübsch aussehende springen aber.
Ist und wir da tun gotos, konnte man nur springen in einem anderen Fall, wie bereits schon. Sie können auch ausgefallene Sachen ähnlich wie Duff ' s device, indem man Fälle innerhalb von anderen Blöcken. Aber das ist einfach verrückt.. 🙂
InformationsquelleAutor falstro
[Ich mache diese Antwort community wiki, weil dies nicht die Antwort auf die Frage per se]
Wie schon andere gesagt haben, das ist sehr schlechter Stil und macht für unlesbaren code...
Alternativen:
als in
InformationsquelleAutor