English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift Operator Precedence and Associativity

In diesem Artikel werden Sie die Regeln zur Berechnung von Ausdrücken mit Operatoren und Operanden kennenlernen.

Swift Operator Priorität

Operator Priorität ist eine Sammlung von Regeln, die zur Berechnung eines gegebenen mathematischen Ausdrucks verwendet werden. Wenn mehrere Operatoren in einem Ausdruck verwendet werden, werden sie in einer bestimmten Reihenfolge berechnet, die als Operator priorität bezeichnet wird. Einige Operatoren haben eine höhere Priorität als andere, was den Berechnungsstil des Ausdrucks beeinflusst.

Operator Prioritätstabelle

Die nachstehende Liste enthält SwiftOperatorDie Priorität. Je höher sie in der Tabelle angezeigt wird, desto höher ist die Priorität.

Swift Standardbibliothek Prioritätsgruppe (von hoch nach niedrig)
OperatorgruppenExample
Bitschiebe Priorität>> &<< &>> >>
Priorität der Multiplikation&* % & * /
Additionspräferenz| &+ &- + –  ^
Priorität der Bereichserstellung..< …
Priorität der Typumwandlungist als
Priorität der Kombinationsoperator??
Vergleichspräferenz!= > < >= <= === ==
Logische Verknüpfung Priorität&&
Logical Disjunction Precedence||
Default Precedence~>
Ternary Operator Precedence?:
Arrow Function Precedence( )
Assignment Precedence|= %= /= &<<= &>>= &= *= >>= <<= ^= += -=

Example1:Swift Operator Priorität

let x = 4 + 5 * 5
print(x)

When you run the above program, the output will be:

29

Im obigen Beispiel könnte man erwarten, dass die Ausgabe von links nach rechts lesend45Aber, die Priorität des Multiplikationsoperators ist höher als die des Additionoperators, daher der Ausdruck4 + 5 * 5wird berechnet4 + (5 * 5) wird daher auf dem Bildschirm ausgegeben29。

Ausführungsschritt
Schritt
OperatorAusdruckWert, der von dem Ausdruck zurückgegeben wird
1*5 * 525
2+4 + 2529
3=print(x)29

Example2hat die Priorität der Swift-Operatoren mit komplexen Zuweisungsoperatoren

var y = 15
y += 10 - 2 * 3
print(y)

When you run the above program, the output will be:

19

Im obigen Beispiel ist der Ausdruck der Variable y var y = 15zuweisen15。

In dem nächsten Ausdruck y + = 10-2 * 3in dem, die Priorität des Multiplikationsoperators ist höher als die des Subtraktionskomplexzuweisungsoperators (+ =)

Daher, der Ausdruck y + = 10-2 * 3 wird berechnet als y = y + (10-(2 * 3))。

Ausführungsschritt
SchrittOperatorAusdruckWert, der von dem Ausdruck zurückgegeben wird
1=var y = 1515
2*2 * 36
3--10-64
4+ =15 + 419

Swift Operator Assoziativität

Obwohl es durch die Präferenz der Operator priorität definierte vordefinierte Regeln gibt, um Ausdrücke zu bewerten, möchten Sie möglicherweise wissen, was passiert, wenn mehrere Operationen der gleichen Priorität vorhanden sind. Die Assoziativität der Operatoren definiert, wie Operationen der gleichen Priorität kombiniert werden.

In Swift können Operatoren linksverbunden, rechtsverbunden oder nicht verknüpft sein. Wenn sie in einem Ausdruck in der Reihenfolge verwendet werden, werden linksverbundene Operatoren, Operanden von der linken Seite der Anweisung gruppiert, rechtsverbundene Operatoren und nicht verknüpfte Operatoren haben kein definiertes Verhalten.

Operatorverknüpfungstabelle

Die nachstehende Tabelle zeigt die Verknüpfung und Priorität der Swift-Operatoren.

Swift-Standardbibliothek Verknüpfung (von hoch nach niedrig Priorität)
OperatorgruppenExampleVerknüpfung
Priorität der Bitschiebeoperationen>>&<<&>> >>
Priorität der Multiplikation&*%&* /Left associative
Additionspräferenz| &+&-+-^Left associative

Priorität der Bereichserstellung

.. <...
Priorität der Typumwandlungist ein
Priorität der Kombinationsoperator??Right associative
Vergleichspräferenz!=> <> = <= === ==

Logical Conjunction Precedence

&&Left associative
Logical Disjunction Precedence||Left associative
Default Precedence~>
Ternary Operator Precedence?:Right associative
Arrow Function Precedence()Right associative
Assignment Precedence| =%= / =&<< =&>> =&= * = >> = << = ^ =Right associative

Example3Swift Operator Associativity

let x =  40  / 2 * 10
print(x)

When you run the above program, the output will be:

200

In the above program, the expression is calculated from left to right because the operators belong to the multiplication precedence group and have left associativity. Therefore, the division operation is executed early, resulting in200. If you want to perform the multiplication operation first, what should you do? You need to place2 * 10Expressions wrapped in curly braces {}, as shown below:

let x =  40  / (2 * 10)
print(x)

When you run the above program, the output will be:

2

You do not need to remember the precedence and associativity table. In most cases, the precedence and associativity of operators are quite meaningful in themselves. If you have any doubts, you can always use this table as a reference. Moreover, it is best to use parentheses to make the code easier to understand.