String in Int in Swift: 5 Methoden mit Benchmarks und Optimierung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

String in Int in Swift: Vom Einfachen zum Leistungsstarken

\n\n

Jeder iOS-Entwickler steht früher oder später vor einer einfachen, auf den ersten Blick, Aufgabe: einen String in eine Zahl umwandeln. Man könnte meinen, einfacher geht es nicht – Int("42") und fertig. Aber wenn die App tausende Strings verarbeitet, ein JSON-Log parst oder Benutzereingaben liest, wird die Leistung dieser Operation kritisch.

\n\n

In diesem Artikel zeigen wir nicht nur, wie man String in Int in Swift umwandelt, sondern führen auch eine echte Untersuchung durch: Welche Methode ist schneller, welche Fallstricke verbergen sich hinter einfachem Code und wie schreibt man optimierten Swift-Code, der in der Produktion nicht enttäuscht.

\n\n

Das Material basiert auf einer beliebten Frage auf Stack Overflow (tausende Aufrufe) und wurde für das Bildungsportal PythonLib adaptiert. Los geht's!

\n\n

1. Basismethode: Int(string)

\n\n

Die offensichtlichste und von Apple empfohlene Methode ist die Verwendung des Initialisierers Int(String). Er gibt einen optionalen Wert Int? zurück, was sicher ist: Wenn der String keine Zahl ist, erhalten Sie nil.

\n\n
let stringNumber = "123"\nif let number = Int(stringNumber) {\n    print("Zahl: \\(number)")\n} else {\n    print("Konnte nicht konvertiert werden")\n}
\n\n

Vorteile:

\n
    \n
  • Lesbarkeit des Codes – die beste aller Varianten.
  • \n
  • Sicherheit – Optional schützt vor Abstürzen.
  • \n
  • Unterstützung verschiedener Zahlensysteme: Int("FF", radix: 16).
  • \n
\n\n

Nachteile:

\n
    \n
  • Leistung – bei Massenoperationen kann es ein Engpass sein.
  • \n
  • Verarbeitet keine Leerzeichen, Währungssymbole, lokalisierte Zahlen.
  • \n
\n\n

Diese Methode ist ideal für 90% der Fälle. Aber wenn Sie einen Log-Parser schreiben oder CSV-Dateien mit einer Million Zeilen verarbeiten – lesen Sie weiter.

\n\n

2. Verwendung von NumberFormatter: Für "schmutzige" Strings

\n\n

Die reale Welt ist nicht perfekt. Ein Benutzer könnte " 42 ", "$100" oder "1 234.56" eingeben. Hier kommt NumberFormatter zur Hilfe – ein leistungsstarkes, aber langsames Werkzeug.

\n\n
let formatter = NumberFormatter()\nformatter.numberStyle = .decimal\n\nif let number = formatter.number(from: " 1 234 ")?.intValue {\n    print(number) // 1234\n}
\n\n

Wann verwenden:

\n
    \n
  • Parsen lokalisierter Zahlen (europäisches Format "1.234,56").
  • \n
  • Strings mit Leerzeichen, Währungen, Prozentzeichen.
  • \n
  • UI-Eingabefelder, in denen der Benutzer alles Mögliche eingeben kann.
  • \n
\n\n

Beachten Sie jedoch: NumberFormatter ist ein Schwergewicht. Seine Erstellung ist teuer, daher cachen Sie die Instanz immer als statische Variable, anstatt sie für jeden String neu zu erstellen.

\n\n

3. Scanner (NSScanner) – alt, aber schnell

\n\n

Ein klassischer Ansatz aus Objective-C – Scanner. Er arbeitet schneller als NumberFormatter, erfordert aber Sorgfalt.

\n\n
let scanner = Scanner(string: "123abc")\nvar intValue: Int = 0\nif scanner.scanInt(&intValue) {\n    print("Gefunden: \\(intValue)") // 123\n}
\n\n

Scanner scannt den String von links nach rechts und stoppt beim ersten nicht-numerischen Zeichen. Dies ist praktisch, wenn Sie eine Zahl aus einem String mit "Müll" extrahieren müssen.

\n\n

Benchmark-Tipp: Scanner ist 3-5 Mal schneller als NumberFormatter, aber 2-3 Mal langsamer als einfaches Int(). Ideal zum Parsen gemischter Daten.

\n\n

4. Benutzerdefinierte Funktion: Manuelles Parsen für maximale Geschwindigkeit

\n\n

Wenn Sie diesen Artikel auf PythonLib lesen, wissen Sie sicher: Wenn Geschwindigkeit gefragt ist, schreiben wir selbst. Für reine Ziffernstrings (nur Zeichen 0-9, ggf. Minus) können Sie Ihren eigenen Parser schreiben.

\n\n
func fastInt(from string: String) -> Int? {\n    var result = 0\n    var isNegative = false\n    var started                

Blogs

Buchempfehlungen