Swift — Referenz aller Sonderzeichen

Die Syntax von Swift macht Gebrauch von unzähligen Sonderzeichen und Zeichenkombinationen — nicht nur für Operatoren, sondern auch für diverse andere Sprachfunktionen. Ich habe mich bemüht, hier eine möglichst vollständige Referenz aller Zeichen und ihrer Bedeutung je nach Kontext zusammenzustellen. Wenn etwas fehlt, melden Sie sich bitte, entweder per Mail an kontakt@kofler.info oder per Kommentar am Ende dieses Beitrags.

Sonderzeichen

+     Vorzeichen, Additions-Operator für Zahlen, Zeichenketten
      und Arrays
++    Inkrement (Postfix/Prefix)
+=    Addition und Zuweisung für Zahlen, Zeichenketten und
      Arrays, z.B. a+=3

-     Vorzeichen, Subtraktions-Operator
--    Dekrement (Postfix/Prefix)
-=    Subtraktion und Zuweisung
->    Rückgabetyp von Funktion, 
      z.B. func myFunc() -> Int {...}

*     Multiplikation
*=    Multiplikation und Zuweisung
*/    beendet Kommentar, der mit /* begann

/     Division
/=    Division und Zuweisung
//    Kommentar bis zum Ende der Zeile
/*    Kommentar bis */

%     Restwert
%=    Restwert mit Zuweisung

=     Zuweisung
==    Vergleichs-Operator (vergleicht Inhalt)
===   Vergleichs-Operator (testet, ob gleiche Objektinstanz)

&     binäres Und
&     Referenzparameter, z.B. swap(&a, &b)
&=    binäres Und und Zuweisung
&&    logisches Und mit Short-Circuit-Logik
&+    Addition ohne Überlaufkontrolle
&-    Subtraktion ohne Überlaufkontrolle
&*    Multiplikation ohne Überlaufkontrolle
&/    Division ohne Überlaufkontrolle
&%    Restwert ohne Überlaufkontrolle

|     binäres Oder
|=    binäres Oder und Zuweisung
||    logisches Oder mit Short-Circuit-Logik

^     binäres Exklusiv-Oder
^=    binäres Exklusiv-Oder und Zuweisung

<     Kleiner-Operator
<=    Kleiner-Gleich-Operator
<<    Bitshift links
<>    generischer Parameter, z.B. func myFunc<T>(...)

>     Größer-Operator
>=    Größer-Operator
>>    Bitshift rechts
>>>   Bitshift rechts ohne Vorzeichen

.     Zugriff auf Variablen und Methoden, z.B. obj.methode()
.     Dezimalpunkt, z.B. 1.23
..<   Half-Open-Range (1..<4 entspricht Range(start: 1,end: 4))
..<   HalfOpenInterval (1.0..<3.4 entspricht 
      HalfOpenInterval(1.0, 3.4))
...   Closed-Range (1...4 entspricht Range(start: 1,end: 4))
...   ClosedInterval

:     Datentyp, z.B. var x:Int
:     Key/Value-Paare, z.B. 
      var dict = ["rot":0xff0000, "blau":0x0000ff]
:     Vererbung, z.B. class myClass : Superclass { ... }
:     Protokoll, 
      z.B. struct myStruct : Protocol1, Protocol2 { ... }

;     Trennung mehrerer Anweisungen in einer Zeile, 
      z.B. a=3; b=5
;     Trennung von Initialisierung, Bedingung und
      Inkrement in for-Schleifen

!     logisches Nicht
!     Kennzeichnung von Optionals, z.B. var x:Int!
!     explizites Unwrapping von Optionals, z.B. x!
!=    Ungleichheitsoperator (vergleicht Inhalt)
!==   Ungleichheitsoperator (testet, ob unterschiedliche 
      Objektinstanz)

? :   Ternärer Operator, z.B. n>0 ? "ok" : "fehler"
?     Kennzeichnung von Optionals, z.B. var x:Int?
?.    Optional Chaining, also optional?.method()?.property ...
??    Nil Coalescing, z.B. result = var ?? -1

()    Gruppierung von Ausdrücken, z.B. 2 * (3 + 4)
()    Parameterliste, z.B. sqrt(2.3)
()    Tupel, z.B. ("x", "y", 23)

{}    Gruppierung von Code, z.B. if true { bla }
{}    Closures, z.B. ar.sort( {$0<$1} )

[]    Zugriff auf Array-Elemente, z.B. arr[3]
[]    Zugriff auf Teilzeichenketten, 
      z.B. s[s.startIndex..<s.endIndex]
[]    Initialisierung von Arrays und Dictionaries, z.B.
      var ar = [1, 2, 3] oder var dict = ["rot":"red"]

$     Closure-Parameter, z.B. ar.sort( {$0<$1} )

@     Attribut, z.B. @autoclosure

_     optionales Trennzeichen in mehrstelligen Zahlen, 
      z.B. 1_234_567
_     allgemeines Pattern-Zeichen, z.B. for _ in 1...3
_     benannte Parameternamen vermeiden,
      z.B. func myFunc(_ para:String)

~     binäres NOT (invertiert alle Bits einer ganzen Zahl)
~=    Vergleichsoperator für switch/case 
~<    nicht dokumentiert, siehe 
      http://stackoverflow.com/questions/26758297
      http://natecook.com/blog/2014/11/swifts-elusive-tilde-gt-operator

#     benannte Parameter erzwingen, 
      z.B. func myFunc(#name:String)
      nur in Swift 1.n, in Swift 2.0 gestrichen

Literale

123             ganze Zahl
1_234           ganze Zahl mit Trennung der Ziffern
0xa0            ganze Zahl, hexadezimale Darstellung
0o77            ganze Zahl, oktale Darstellung
0b1101          ganze Zahl, binäre Darstellung

0.1             Fließkommazahl
1.2e3           Fließkommazahl in Exponentialdarstellung
1.2E3           wie oben
0x10p3          Fließkommazahl in hexadezimaler 
                Exponentialdarstellung (16*2^3 = 128.0)
0x10P3          wie oben

true            wahr 
false           falsch
nil             nicht initialisiert, nur für Optionals

""              Zeichenketten, z.B. "abc"
"\0"            Null-Zeichen (Code 0)
"\t"            Tabulator (Code 9)
"\n"            Line Feed (Code 10)
"\r"            Carriage Return (Code 13)
"\""            doppeltes Anführungszeichen (Code 34)
"\'"            einfaches Anführungszeichen (Code 39)
"\\"            Backslash (Code 94)
"\u{hexcode}"   Unicode-Zeichen mit dem angegebenen Code
"\(ausdruck)"   wertet den Ausdruck aus (String Interpolation)

Referenz

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AboutTheLanguageReference.html