Swift-Operatoren
Ein Operator ist ein Symbol, das dem Compiler mitteilt, eine mathematische oder logische Operation auszuführen.
Swift bietet die folgenden Operatoren:
- Arithmetische Operatoren
- Vergleichsoperatoren
- Logische Operatoren
- Bitweise Operatoren
- Zuweisungsoperatoren
- Bereichsoperatoren
- Weitere Operatoren
In diesem Kapitel werden wir arithmetische Operatoren, Vergleichsoperatoren, logische Operatoren, bitweise Operatoren, Zuweisungsoperatoren und andere Operatoren im Detail vorstellen.
Arithmetische Operatoren
Die folgende Tabelle listet die von der Sprache Swift unterstützten arithmetischen Operatoren auf, wobei Variable A 10 und Variable B 20 ist:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| + | Plus | A + B ergibt 30 |
| − | Minus | A − B ergibt -10 |
| * | Multiplikation | A * B ergibt 200 |
| / | Division | B / A ergibt 2 |
| % | Rest | B % A ergibt 0 |
Hinweis:In Swift 3 wurde es entfernt.++、--。
Beispiel
Das Folgende ist ein einfaches Beispiel für arithmetische Operationen:
import Cocoa
var A = 10
var B = 20
print("A + B 结果为:\(A + B)")
print("A - B 结果为:\(A - B)")
print("A * B 结果为:\(A * B)")
print("B / A 结果为:\(B / A)")
A += 1 // 类似 A++
print("A += 1 后 A 的值为 \(A)")
B -= 1 // 类似 B--
print("B -= 1 后 B 的值为 \(B)")
Die Ausgabe des obigen Programms ist:
A + B 结果为:30 A - B 结果为:-10 A * B 结果为:200 B / A 结果为:2 A += 1 后 A 的值为 11 B -= 1 后 B 的值为 19
Vergleichsoperatoren
Die folgende Tabelle listet die von der Swift-Sprache unterstützten Vergleichsoperatoren auf, wobei Variable A den Wert 10 und Variable B den Wert 20 hat:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| == | Gleich | (A == B) ist falsch. |
| != | Ungleich | (A != B) ist wahr. |
| > | Größer als | (A > B) ist falsch. |
| < | Kleiner als | (A < B) ist wahr. |
| >= | Größer als oder gleich | (A >= B) ist falsch. |
| <= | Kleiner als oder gleich | (A <= B) ist wahr. |
Beispiel
Das Folgende ist ein einfaches Beispiel für Vergleichsoperationen:
import Cocoa
var A = 10
var B = 20
print("A == B 结果为:\(A == B)")
print("A != B 结果为:\(A != B)")
print("A > B 结果为:\(A > B)")
print("A < B 结果为:\(A < B)")
print("A >= B 结果为:\(A >= B)")
print("A <= B 结果为:\(A <= B)")
Die Ausgabe des obigen Programms ist:
A == B 结果为:false A != B 结果为:true A > B 结果为:false A < B 结果为:true A >= B 结果为:false A <= B 结果为:true
Logische Operatoren
Die folgende Tabelle listet die von der Swift-Sprache unterstützten logischen Operatoren auf, wobei Variable A true und Variable B false ist:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| && | Logisches UND. Wenn beide Seiten des Operators WAHR sind, dann ist es WAHR. | (A && B) ist falsch. |
| || | Logisches ODER. Wenn mindestens eine Seite des Operators WAHR ist, dann ist es WAHR. | (A || B) ist wahr. |
| ! | Logisches NICHT. Kehrt den booleschen Wert um, sodass true zu false und false zu true wird. | !(A && B) ist wahr. |
Das Folgende ist ein einfaches Beispiel für logische Operationen:
import Cocoa
var A = true
var B = false
print("A && B 结果为:\(A && B)")
print("A || B 结果为:\(A || B)")
print("!A 结果为:\(!A)")
print("!B 结果为:\(!B)")
Die Ausgabe des obigen Programms ist:
A && B 结果为:false A || B 结果为:true !A 结果为:false !B 结果为:true
Bitweise Operatoren
Bitweise Operatoren werden verwendet, um Operationen an binären Bits durchzuführen. ~, &, | und ^ sind jeweils NICHT-, UND-, ODER- und XOR-Operationen, wie in den folgenden Tabellenbeispielen dargestellt:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
Wenn A = 60; und B = 13; dann lauten die Binärdarstellungen der beiden Variablen:
A = 0011 1100 B = 0000 1101
Bitweise Operationen ausführen:
| Operator | Beschreibung | Diagramm | Beispiel |
|---|---|---|---|
| & | Bitweises UND. Der bitweise UND-Operator operiert mit zwei Zahlen und gibt eine neue Zahl zurück, bei der jedes Bit nur dann 1 ist, wenn die entsprechenden Bits beider Eingabezahlen 1 sind. | ![]() |
Das Ergebnis von (A & B) ist 12, binär ist 0000 1100 |
| | | Bitweises OR. Der bitweise OR-Operator | vergleicht zwei Zahlen und gibt eine neue Zahl zurück, bei der jedes Bit auf 1 gesetzt ist, wenn die entsprechenden Bits der beiden Eingabezahlen nicht beide 0 sind (d. h., entweder eines ist 1 oder beide sind 1). | ![]() |
Das Ergebnis von (A | B) ist 61, binär ist 0011 1101 |
| ^ | Bitweises XOR. Der bitweise XOR-Operator ^ vergleicht zwei Zahlen und gibt eine Zahl zurück, bei der jedes Bit auf 1 gesetzt ist, wenn die entsprechenden Bits der beiden Eingabezahlen unterschiedlich sind, und auf 0 gesetzt ist, wenn sie gleich sind. | ![]() |
Das Ergebnis von (A ^ B) ist 49, binär ist 0011 0001 |
| ~ | Der bitweise NOT-Operator ~ invertiert jedes Bit eines Operanden. | ![]() |
Das Ergebnis von (~A ) ist -61, binär ist 1100 0011 in Zweierkomplement-Darstellung. |
| << | Bitweise Linksverschiebung. Der Linksverschiebungsoperator (<<) verschiebt alle Bits des Operanden um die angegebene Anzahl von Stellen nach links. |
Das folgende Diagramm zeigt das Ergebnis von 11111111 << 1 (11111111 um ein Bit nach links verschoben). Die blauen Ziffern geben die verschobenen Bits an, die grauen Ziffern geben die verworfenen Bits an, und die leeren Positionen werden mit orangefarbenen 0en gefüllt.
| Das Ergebnis von A << 2 ist 240, binär ist 1111 0000 |
| >> | Bitweise Rechtsverschiebung. Der Rechtsverschiebungsoperator (>>) verschiebt alle Bits des Operanden um die angegebene Anzahl von Stellen nach rechts. |
Das folgende Diagramm zeigt das Ergebnis von 11111111 >> 1 (11111111 um ein Bit nach rechts verschoben). Die blauen Ziffern geben die verschobenen Bits an, die grauen Ziffern geben die verworfenen Bits an, und die leeren Positionen werden mit orangefarbenen 0en gefüllt.
| Das Ergebnis von A >> 2 ist 15, binär ist 0000 1111 |
Das Folgende ist ein einfaches Beispiel für bitweise Operationen:
import Cocoa
var A = 60 // 二进制为 0011 1100
var B = 13 // 二进制为 0000 1101
print("A&B 结果为:\(A&B)")
print("A|B 结果为:\(A|B)")
print("A^B 结果为:\(A^B)")
print("~A 结果为:\(~A)")
Die Ausgabe des obigen Programms ist:
A&B 结果为:12 A|B 结果为:61 A^B 结果为:49 ~A 结果为:-61
Zuweisungsoperatoren
Die folgende Tabelle listet die grundlegenden Zuweisungsoperationen in der Sprache Swift auf:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| = | Einfache Zuweisungsoperation, weist den rechten Operanden dem linken Operanden zu. | C = A + B weist C das Ergebnis von A + B zu |
| += | Addieren und zuweisen, addiert den linken und rechten Operanden und weist das Ergebnis dem linken Operanden zu. | C += A ist äquivalent zu C = C + A |
| -= | Subtrahieren und zuweisen, subtrahiert den rechten Operanden vom linken Operanden und weist das Ergebnis dem linken Operanden zu. | C -= A ist äquivalent zu C = C - A |
| *= | Multiplizieren und zuweisen, multipliziert den linken und rechten Operanden und weist das Ergebnis dem linken Operanden zu. | C *= A ist äquivalent zu C = C * A |
| /= | Dividieren und zuweisen, dividiert den linken Operanden durch den rechten Operanden und weist das Ergebnis dem linken Operanden zu. | C /= A ist äquivalent zu C = C / A |
| %= | Modulo und zuweisen, nimmt den Rest des linken und rechten Operanden und weist das Ergebnis dem linken Operanden zu. | C %= A ist äquivalent zu C = C % A |
| <<= | Bitweise Linksverschiebung und Zuweisung | C <<= 2 ist äquivalent zu C = C << 2 |
| >>= | Bitweise Rechtsverschiebung und Zuweisung | C >>= 2 ist äquivalent zu C = C >> 2 |
| &= | Bitweises UND mit Zuweisung | C &= 2 ist äquivalent zu C = C & 2 |
| ^= | Bitweises XOR mit Zuweisung | C ^= 2 ist äquivalent zu C = C ^ 2 |
| |= | Bitweises ODER mit Zuweisung | C |= 2 ist äquivalent zu C = C | 2 |
Das Folgende ist ein einfaches Beispiel für Zuweisungsoperationen:
import Cocoa
var A = 10
var B = 20
var C = 100
C = A + B
print("C 结果为:\(C)")
C += A
print("C 结果为:\(C)")
C -= A
print("C 结果为:\(C)")
C *= A
print("C 结果为:\(C)")
C /= A
print("C 结果为:\(C)")
//以下测试已注释,可去掉注释测试每个实例
/*
C %= A
print("C 结果为:\(C)")
C <<= A
print("C 结果为:\(C)")
C >>= A
print("C 结果为:\(C)")
C &= A
print("C 结果为:\(C)")
C ^= A
print("C 结果为:\(C)")
C |= A
print("C 结果为:\(C)")
*/
Die Ausgabe des obigen Programms ist:
C 结果为:30 C 结果为:40 C 结果为:30 C 结果为:300 C 结果为:30
Bereichsoperatoren
Swift bietet zwei Bereichsoperatoren.
| Operator | Beschreibung | Beispiel |
|---|---|---|
| Geschlossener Bereichsoperator | Der geschlossene Bereichsoperator (a...b) definiert einen Bereich, der alle Werte von a bis b enthält (einschließlich a und b), und b muss größer oder gleich a sein. Der geschlossene Bereichsoperator ist sehr nützlich, wenn über alle Werte in einem Bereich iteriert wird, z. B. in einer for-in-Schleife: | Der Bereich 1...5 hat die Werte 1, 2, 3, 4 und 5 |
| Halboffener Bereichsoperator | Der halboffene Bereichsoperator (a..<b) definiert einen Bereich von a bis b, schließt b jedoch nicht ein. Er wird halboffen genannt, weil er den ersten Wert einschließt, aber nicht den letzten Wert. | Der Bereich 1..<5 hat die Werte 1, 2, 3 und 4 |
Das Folgende ist ein einfaches Beispiel für Bereichsoperationen:
import Cocoa
print("闭区间运算符:")
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
print("半开区间运算符:")
for index in 1..<5 {
print("\(index) * 5 = \(index * 5)")
}
Die Ausgabe des obigen Programms ist:
闭区间运算符: 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 半开区间运算符: 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20
Weitere Operatoren
Swift bietet andere Arten von Operatoren, wie unäre, binäre und ternäre Operatoren.
- Ein unärer Operator arbeitet mit einem einzelnen Operanden (wie z. B.
-a). Unäre Operatoren werden in Präfix- und Postfix-Operatoren unterteilt. Ein Präfix-Operator muss unmittelbar vor seinem Operanden stehen (z. B.!b), Postfix-Operatoren müssen unmittelbar auf den Operanden folgen (z. B. c!).Hinweise:In Java/C gibt es keine Syntax wie c!. In Swift wird sie verwendet, um einen Wert aus einem Optional-Typ abzurufen. - Binäre Operatoren arbeiten mit zwei Operanden (z. B.
2 + 3) und sind Infix-Operatoren, weil sie zwischen den beiden Operanden stehen. - Ternäre Operatoren arbeiten mit drei Operanden. Wie in C hat Swift nur einen ternären Operator, nämlich den ternären Bedingungsoperator (
a ? b : c)。
| Operator | Beschreibung | Beispiel |
|---|---|---|
| Unäres Minus | Setze ein --Zeichen als Präfix vor die Zahl | -3 oder -4 |
| Unäres Plus | Setze ein +-Zeichen als Präfix vor die Zahl | +6 ergibt 6 |
| Ternärer Operator | condition ? X : Y | Wennconditionwahr ist, ist der Wert X, andernfalls Y |
Die folgenden sind einfache Beispiele für unäre, binäre und ternäre Operationen:
import Cocoa
var A = 1
var B = 2
var C = true
var D = false
print("-A 的值为:\(-A)")
print("A + B 的值为:\(A + B)")
print("三元运算:\(C ? A : B )")
print("三元运算:\(D ? A : B )")
Die Ausgabe des obigen Programms ist:
-A 的值为:-1 A + B 的值为:3 三元运算:1 三元运算:2
Operatorrangfolge
Ein Ausdruck kann mehrere Datenobjekte unterschiedlicher Datentypen enthalten, die durch verschiedene Operatoren verbunden sind. Da ein Ausdruck mehrere Operationen enthalten kann, können unterschiedliche Auswertungsreihenfolgen unterschiedliche Ergebnisse oder sogar Operationsfehler erzeugen. Wenn ein Ausdruck mehrere Operationen enthält, muss er daher in einer bestimmten Reihenfolge kombiniert werden, um die Sinnhaftigkeit der Operation sowie die Korrektheit und Eindeutigkeit des Ergebnisses sicherzustellen.
Die Präzedenz nimmt von oben nach unten ab; die oberste hat die höchste Präzedenz, und der Kommaoperator hat die niedrigste Präzedenz.
Bei gleicher Priorität werden Operationen gemäß der Assoziativität ausgeführt. Die meisten Operationen werden von links nach rechts ausgewertet, und nur drei Prioritätsebenen sind rechtsassoziativ: unäre Operatoren, bedingte Operatoren und Zuweisungsoperatoren.
Grundlegende Vorrangregeln zum Merken:
- Zeiger haben die höchste Priorität, und unäre Operationen haben Vorrang vor binären Operationen. Zum Beispiel Plus- und Minuszeichen.
- Multiplikation, Division (Modulo) vor Addition und Subtraktion.
- Arithmetische Operationen zuerst, dann Schiebeoperationen und schließlich bitweise Operationen. Bitte beachten: 1 << 3 + 2 & 7 ist äquivalent zu (1 << (3 + 2))&7
- Logische Operationen werden zuletzt ausgewertet.
Swift-Operatorpriorität (von hoch nach niedrig):
| Operator | Beispiel |
|---|---|
| Bitweise Operatoren | >> &<< &>> >> |
| Multiplikationsoperatoren | &* % & * / |
| Additionsoperatoren | | &+ &- + - ^ |
| Bereichsoperatoren | ..< ... |
| Typumwandlungsoperatoren | is as |
| Nil-Coalescing-Operator | ?? |
| Vergleichsoperatoren | != > < >= <= === == |
| Logischer AND-Operator | && |
| Logischer OR-Operator | || |
| Wellenpfeil | ~> |
| Ternärer Operator | ?: |
| Pfeilfunktion | ( ) |
| Zuweisungsoperator | |= %= /= &<<= &>>= &= *= >>= <<= ^= += -= |
Das folgende ist ein einfaches Beispiel für die Operatorpriorität:
import Cocoa
var A = 0
A = 2 + 3 * 4 % 5
print("A 的值为:\(A)")
Die Ausgabe des obigen Programms ist:
A 的值为:4
Beispielanalyse:
Gemäß der Operatorpriorität können die Operationen im obigen Programm in die folgenden Schritte analysiert werden. Der Ausdruck ist äquivalent zu:
2 + ((3 * 4) % 5)
Schritt 1: (3 * 4) = 12, also ist der Ausdruck äquivalent zu:
2 + (12 % 5)
Schritt 2: 12 % 5 = 2, also ist der Ausdruck äquivalent zu:
2 + 2
An diesem Punkt ist leicht zu erkennen, dass das Ergebnis der Berechnung 4 ist.
Weitere Erweiterungen


