TEAM LICENSES: Save money and learn new skills through a Hacking with Swift+ team license >>

Datentypen

Es gibt viele Arten von Daten und Swift behandelt diese alle individuell. Du hast bereits einen der wichtigsten Typen gesehen, als Du einen Text einer Variable zugeordnet hast, aber in Swift heißt dieser Typ String - also eine Zeichenkette.

Strings können lang sein (z.B. eine Million Buchstaben oder mehr), kurz (z.B. 10 Buchstaben) oder sogar leer (keine Buchstaben), es ist egal: Es sind alles Zeichenketten aus Sicht von Swift und alle funktionieren auf die gleiche Art und Weise. Swift weiß, dass name eine Zeichenkette ist, weil Du dieser Variablen eine Zeichenkette zuordnest, wenn Du sie erstellst: "Tim McGraw". Wenn Du Deinen Code auf folgende Weise umschreibst, würde er nicht mehr funktionieren:

var name
name = "Tim McGraw"

Diesmal wird Xcode Dir eine Fehlermeldung ausgeben, welche im Moment noch keinen Sinn ergibt: "Type annotation missing in pattern". Das heißt so viel, wie: "Ich weiß nicht, welchen Datentyp name hat, weil Du mir nicht genügend Informationen gegeben hast."

Du hast nun zwei Optionen: Entweder erstellst Du Deine Variable und gibst ihr einen Initial-Wert in derselben Codezeile oder Du benutzt die sogenannte type annotation, mit der Du Swift mitteilst, welchen Datentyp diese Variable speichert, selbst wenn Du ihr jetzt gerade keinen Wert gibst.

Du bist mit der ersten Option schon vertraut, also schauen wir uns die zweite an: Type Annotation. Wir wissen, dass name ein String sein wird, also können wir Swift dies mitteilen, indem wir einen Doppelpunkt und dann String dahinter schreiben, ungefähr so:

var name: String
name = "Tim McGraw"

In echten App-Projekten - anders als in Playgrounds - funktioniert das sehr gut, weil Swift weiß, welchen Datentyp name in Zukunft halten wird. Playgrounds sind aber ein etwas speziellerer Fall, also wirst Du immer noch eine Fehlermeldung im Playground kriegen.

Hinweis: Einige Leute mögen es, ein Leerzeichen vor und nach dem Doppelpunkt zu schreiben, also var name : String, aber das ist falsch und Du solltest vermeiden, auf diesen Fehler hinzuweisen, wenn Du die Leute noch nicht so gut kennst.

Die Lektion hier ist, dass Swift immer wissen will, welchen Datentyp eine Variable oder Konstante haben wird. Immer. Du kannst dem nicht entfliehen und das ist gut so, weil dies für etwas namens "type safety", also Typsicherheit, sorgt - wenn Du sagst "dies hier ist ein String" und später versuchst, ein Kaninchen dort rein zu stecken, wird Swift das verweigern.

Wir können das nun ausprobieren, indem wir einen anderen wichtigen Datentyp namens Int, Kurzform für "integer", also ganze Zahl, benutzen. Ganze Zahlen sind Zahlen wie 3, 30, 300 oder -16777216. Als Beispiel:

var name: String
name = "Tim McGraw"

var age: Int
age = 25

Dies erstellt eine Variable, welche einen String darstellen soll und eine andere, welche eine ganze Zahl sein soll. Beachte, wie String und Int groß geschrieben werden, wohingegen name und age klein geschrieben werden - das ist die übliche Coding-Konvention von Swift. Eine Coding-Konvention ist etwas, was Swift egal ist (Du kannst Deine Variablen irgendwie benennen!), nicht aber anderen Entwicklern. In diesem Fall werden Datentypen immer groß geschrieben, nicht aber Variablen und Konstanten.

Jetzt, da wir zwei Variablen von zwei verschiedenen Typen haben, kannst Du type safety in Aktion erleben. Versuche, folgendes zu schreiben:

name = 25
age = "Tim McGraw"

In diesem Code versuchst Du, eine ganze Zahl in einer String-Variable und eine Zeichenkette in einer Integer-Variable zu speichern - und glücklicherweise wird Xcode Fehlermeldungen schmeißen. Du denkst vielleicht, dass das kleinlich ist, aber eigentlich ist das ziemlich hilfreich: Du gehst ein Versprechen ein, dass eine Variable einen bestimmten Datentyp speichert und Xcode sorgt dafür, dass Du dieses Versprechen stets einhältst.

Bevor Du weiter machst, lösche bitte die fehlerhaften zwei Zeilen Code, ansonsten wird nichts, was danach in Deinem Playground kommt, funktionieren!

Float und Double

Schauen wir uns zwei weitere Datentypen an, nämlich Float und Double. Dies ist Swifts Art, Komma-Zahlen zu speichern, wie 3.1, 3.141, 3.1415926 und -16777216.5 (Anm. des Übersetzers: Anders, als man es im Deutschen gewohnt ist, schreibt man Komma-Zahlen beim Programmieren mit einem amerikanischen . statt mit deutschem ,. Dies gilt für die allermeisten Programmiersprachen.). Es gibt dafür zwei Datentypen, weil Du dann auswählen kannst, wie viel Genauigkeit Du erzielen willst, aber meistens ist das nicht von Belang, weswegen die offizielle Apple-Empfehlung ist, immer Double zu benutzen, weil dies die meiste Genauigkeit bietet.

Versuche, folgendes in Deinen Playground zu schreiben:

var latitude: Double
latitude = 36.166667

var longitude: Float
longitude = -86.783333

Du siehst, dass beide Zahlen auf der rechten Seite erscheinen, aber schau genau hin, weil es da eine kleine Diskrepanz gibt. Wir haben gesagt, dass longitude -86,783333 sein soll, aber in der Ergebnis-Spalte siehst Du -86,78333 - es fehlt eine letzte 3 am Ende. Nun wirst Du vielleicht sagen "Was sind schon 0.000003 unter Freunden" aber das ist genau das, was ich mit Genauigkeit meine.

Weil Playgrounds sich aktualisieren, sobald Du tippst, können wir genau ausprobieren, in wiefern sich Float und Double unterscheiden. Versuche mal, den Code folgendermaßen zu ändern:

var longitude: Float
longitude = -86.783333
longitude = -186.783333
longitude = -1286.783333
longitude = -12386.783333
longitude = -123486.783333
longitude = -1234586.783333

Wir fügen also Zahlen vor dem Dezimalpunkt hinzu, während wir den Rest der Zahl gleich lassen. Wenn Du aber in das Ergebnis-Panel guckst, wirst Du feststellen, dass Swift Zahlen nach dem Punkt entfernt, während Du vorne Zahlen einfügst. Das passiert, weil es nur begrenzt Platz gibt, in der die Zahlen gespeichert werden können, also wird der wichtigste Teil der Zahlen zuerst gespeichert - sich um 1 Million zu vertun, ist eine große Sache, während sich um 0.000003 zu vertun weniger schlimm ist.

In Swift speichern Floats viel weniger Daten als Doubles, also solltest Du Doubles benutzen, wo es nur geht.

Versuche nun, Float zu Double zu ändern und Du wirst sehen, dass Swift nun jedes Mal die korrekte Zahl ausgibt:

var longitude: Double

Dies liegt, wie gesagt, daran, dass Double doppelt so genau wie Float ist, also muss Swift die Zahl hinten nicht abschneiden, damit es passt. Doubles haben trotzdem ihre Grenzen - wenn Du eine riesige Zahl wie 123456789.123456789 speichern würdest, würdest Du sehen, dass sie auf 123456789.12345679 beschnitten wird.

Boolean

Swift hat einen eingebauten Datentyp, der speichern kann, ob ein Wert true oder false (also wahr oder falsch) ist. Dieser heißt Bool, Kurzform für Boolean. Bools haben keinen Platz für "vielleicht" oder "wahrscheinlich", nur absolutes wahr oder falsch. Ein Beispiel:

var stayOutTooLate: Bool
stayOutTooLate = true

var nothingInBrain: Bool
nothingInBrain = true

var missABeat: Bool
missABeat = false

Type annotations geschickt benutzen

Wie Du gelernt hast, gibt es zwei Wege, Swift mitzuteilen, welchen Datentyp eine Variable hält: Einen Wert zuweisen, wenn Du die Variable erstellst oder type annotation benutzen. Wenn Du die Wahl hast, ist die erste Option immer die bessere, weil sie offensichtlicher ist. Ein Beispiel:

var name = "Tim McGraw"

…ist besser als:

var name: String
name = "Tim McGraw"

Dies gilt für alle Datentypen. Beispiel:

var age = 25
var longitude = -86.783333
var nothingInBrain = true

Diese Technik wird als type inference, also Typ-Inferenz, bezeichnet, weil Swift inferieren kann, welcher Datentyp für eine Variable benutzt werden soll, indem es sich die Daten anschaut, welche man dort ablegt. Bei Zahlen wie -86.783333 wird Swift immer ein Double statt einen Float inferieren.

Der Vollständigkeit halber sollte ich noch sagen, dass es möglich ist, einen Datentyp festzulegen und zeitgleich einen Wert zuzuweisen, so wie hier:

var name: String = "Tim McGraw"
Hacking with Swift is sponsored by String Catalog.

SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!

Localize My App

Sponsor Hacking with Swift and reach the world's largest Swift community!

BUY OUR BOOKS
Buy Pro Swift Buy Pro SwiftUI Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

Average rating: 4.3/5

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.