Ein alter C-Programmierer könnte etwas Hilfe mit Swift verwenden.
Ich verstehe nichts über die Fallsyntax. Zum Beispiel:
%Vor% Der case 20...30 = age
scheint der Bedingungstest für die if
-Anweisung zu sein. So war ich zunächst verwirrt, als ich den Zuweisungsoperator ('=') anstelle eines Vergleichsoperators ('==') benutzte.
Ok, dachte ich mir, das bedeutet wahrscheinlich, dass die case
-Anweisung tatsächlich ein Funktionsaufruf ist, der einen booleschen Wert zurückgibt. Der zurückgegebene Wert erfüllt dann den Vergleichstest in der if
-Anweisung.
Als Versuch habe ich versucht, die case
-Anweisung wie einen regulären konditionellen Test zu behandeln und Klammern darum zu setzen. Swift akzeptiert gerne if (x == 5)
oder if (true)
. Aber if (case 20...30 = age)
erzeugt einen Fehler. Daher scheint sich die case
-Anweisung nicht wie eine Funktion zu verhalten.
Ich bin nur neugierig zu verstehen, was hier passiert. Jede Einsicht würde sehr geschätzt werden.
Der Operator ist if case
, Sie können also keine Klammern setzen. Die Syntax und das Verhalten basieren auf denen der case
-Anweisung in einer Swift switch
-Anweisung (siehe mein Online-Buch wenn Sie Details benötigen. In einer case
-Anweisung ist 20...30
ein Intervall, das als -Muster verwendet wird und mit contains
gegen das Intervall arbeitet. Das Gleichheitszeichen ist tatsächlich wirklich verwirrend, aber das war der erste Versuch einer Syntax, um auszudrücken, womit die case
-Anweisung verglichen werden soll (dh das -Tag , das hinter dem switch
-Schlüsselwort in a steht switch
statement).
Also, wenn Sie das verstehen:
%Vor%... dann verstehst du, wie es direkt in dieses verwandelt wird:
%Vor%@matt erklärt sehr gut, was dieser Code tut. Ich bin hier, um eine bessere Alternative vorzuschlagen.
Sie können die % co_de verwenden % Operator, um Bereiche zu überprüfen. Es ist ein regulärer Operator / Funktion, die nur ~=
zurückgibt, ohne spezielle Sprachmagie.
Nur noch ein Hinweis zu diesen Swift-Operatoren. Man muss bedenken, dass Swift einen sehr fortgeschrittenen und abstrahierten Compiler hat, also sind Schlüsselwörter nur Schlüsselwörter, und ihr Verhalten hängt von ihrer Verwendung ab.
Im Gegensatz zu C (und anderen syntaktisch verwandten Sprachen von C ++ bis JavaScript), wo if
einfach zum Testen eines booleschen Werts (oder etwas, der in eins konvertiert werden kann) verwendet wird, ist das Konzept der if
-Anweisung sehr viel breiter. Im Allgemeinen denke ich daran, den Zugriff auf einen Bereich durch Verwendung einer Vielzahl von Techniken, einschließlich boolescher Tests, zu ermöglichen.
Sie können sich if
, guard
, while
und repeat
- while
als allgemeinere Kontrollflussanweisungen vorstellen, mit wesentlich erweitertem Verhalten. Sicherlich können sie immer noch einen booleschen Wert testen, aber sie können auch andere Bedingungen testen. In Ihrem Szenario lautet die getestete Bedingung, ob eine Variable mit einem definierten Muster übereinstimmt (stimmt age
mit dem Muster 20...30
überein).
Sie können auch testen, ob eine Variable erfolgreich auf einen nicht nil
-Wert ( if let
) gesetzt wurde. Das Ergebnis der let
-Operation gibt keinen Booleschen Wert zurück, da es jedoch innerhalb der if
-Anweisung auftritt, weiß die Swift-Laufzeitumgebung, dass sie Teil des Kontrollflusses ist. Beachten Sie auch, dass dies das Verhalten von let
geringfügig ändert, insofern als Code innerhalb des Blocks if
nun den neuen Wert nicht nil
anzeigt und sichergestellt ist, dass es nicht nil
ist.
Diese Verhaltensweisen können auch wie folgt mit Kommas kombiniert werden:
%Vor% Das Konzept von if let
oder if case
als separate Operatoren ist ... nicht genau darüber nachzudenken.
Und wie gesagt, diese Syntax ist auch in anderen Kontrollflüssen gültig:
%Vor%Tags und Links swift