Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Zeichenketten konvertieren

Sie haben sicher schon mit Programmen gearbeitet, bei denen Sie Informationen in Felder auf einer grafischen Oberfläche eingeben mussten. Solche Eingaben eines Benutzers sind immer Zeichenketten, wie sie ein NSString repräsentiert. Das muss auch so sein, denn es können ja Buchstaben, Zahlen und sogar Sonderzeichen eingegeben werden. NSString kann zwar alle diese unterschiedlichen Zeichen aufnehmen, hat aber einen entschiedenen Nachteil: Rechnen können Sie damit nicht.

Für mathematische Operationen brauchen Sie immer echte Zahlendatentypen wie int, float oder NSNumber, den Sie später kennen lernen werden. Die Zeichenketten "100" und "200" zu addieren ist genau so unmöglich, wie die Zeichenketten "Hallo" und "Welt" zu addieren. Will man rechnen, ist eine Umwandlung nötig.

Wir werden uns an dieser Stelle noch nicht mit Benutzereingaben beschäftigen, das folgt in einem späteren Kapitel, wohl aber mit der Konvertierung eines NSString in verschiedene Zahlendatentypen. Die Absicht ist dabei die Gleiche, wie konvertiert man einen Text in ein Format, um damit rechnen zu können?

Die Konvertierung eines NSString in eine Zahl ist sehr einfach, benötigt aber je nach Zieldatentyp verschiedene Aufrufe.
NSString *textstring = @"56912";

int myInteger = [textstring intValue];
double myDouble = [textstring doubleValue];
float myFloat = [textstring floatValue];

NSLog (
@"%i",myInteger);
NSLog (
@"%f",myDouble);
NSLog (
@"%f",myFloat);
Wie Sie sehen sind diese Umwandlung ein Kinderspiel, wenn man die richtigen Nachrichten an das NSString-Objekt sendet. Vielleicht fragen Sie sich aber was passiert, wenn sich der Text nicht konvertieren lässt, weil er vielleicht gar keine Zahlen enthält?

Versuchen Sie doch mal folgenden Text auf die eben gezeigte Art zu konvertieren:
NSString *textstring = @"Hallo Welt";
Wie erwartet funktioniert das natürlich nicht. Aber das Programm wird fehlerfrei ausgeführt, allerdings sind alle Zahlen 0. Das gleiche Resultat erhält man, wenn der NSString Zahlen und Buchstaben enthält.
NSString *textstring = @"Hallo56912";
Besonders interessant ist das Ergebnis, wenn der NSString einer Fließkommazahl entspricht. Dieses in einen double-Typen zu konvertieren ist problemlos, aber was geschieht bei einer Konvertierung zu einer Ganzzahl (int)?
NSString *textstring = @"56912.52";
stacks_image_A3380A6D-D0CD-4AAB-B714-451FFB0F5CAC
Wie Sie sehen es passiert nichts schlimmes, die Dezimalstellen werden für den int-Typ einfach nur abgeschnitten. Sehr deutlich wird ebenfalls, dass sich der float und double-Wert in den Nachkommastellen unterscheiden. Hier wird sehr gut deutlich, dass Texte und Zahlen in einem Computerprogramm nicht das Gleiche sind, und jegliche Umwandung Raum für Fehler schafft. Ein größerer Datentyp ist immer eine bessere Wahl und liefert größere Genauigkeit. Ein double Typ ist eigentlich immer zu empfehlen, da der doppelt so genau wie float ist. Dieser Eigenschaft verdankt er auch seinen Namen.

Für Konvertierungen in die andere Richtung, also um aus einer Zahl eine NSString zu machen, verwenden Sie die stringWithFormat-Methode. Hier kommen wieder die schon bekannten Format Specifier zum Einsatz.

Es funktioniert mit double-Typen ...
double myDouble = 98765.12345;
NSString *textstring = [NSString stringWithFormat:
@"%f", myDouble];
NSLog (
@"Zahl as Text: %@",textstring);
.. ebenso wie mit int-Typen.
int myInt = 987545;
NSString *textstring = [NSString stringWithFormat:
@"%i", myInt];
NSLog (
@"Zahl as Text: %@",textstring);
Und ebenfalls mit einem Format Specifier können Sie mehrere Zahlen zu einer Zeichenkette zusammenfügen.
int myI1 = 98765;
int myI2 = 12345;
NSString *textstring =
[NSString stringWithFormat:
@"I1: %i, I2: %i", myI1,myI2];
NSLog (
@"Zahlen: %@",textstring)
stacks_image_CE08F06B-6563-4684-A839-27096A7F0F80