String in Int in Swift: Vom Einfachen zum Leistungsstarken
\n\nJeder 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.
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\nDas Material basiert auf einer beliebten Frage auf Stack Overflow (tausende Aufrufe) und wurde für das Bildungsportal PythonLib adaptiert. Los geht's!
\n\n1. Basismethode: Int(string)
\n\nDie 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.
let stringNumber = "123"\nif let number = Int(stringNumber) {\n print("Zahl: \\(number)")\n} else {\n print("Konnte nicht konvertiert werden")\n}\n\nVorteile:
\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
Nachteile:
\n- \n
- Leistung – bei Massenoperationen kann es ein Engpass sein. \n
- Verarbeitet keine Leerzeichen, Währungssymbole, lokalisierte Zahlen. \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\n2. Verwendung von NumberFormatter: Für "schmutzige" Strings
\n\nDie 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.
let formatter = NumberFormatter()\nformatter.numberStyle = .decimal\n\nif let number = formatter.number(from: " 1 234 ")?.intValue {\n print(number) // 1234\n}\n\nWann 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
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.
3. Scanner (NSScanner) – alt, aber schnell
\n\nEin klassischer Ansatz aus Objective-C – Scanner. Er arbeitet schneller als NumberFormatter, erfordert aber Sorgfalt.
let scanner = Scanner(string: "123abc")\nvar intValue: Int = 0\nif scanner.scanInt(&intValue) {\n print("Gefunden: \\(intValue)") // 123\n}\n\nScanner 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\nBenchmark-Tipp: Scanner ist 3-5 Mal schneller als NumberFormatter, aber 2-3 Mal langsamer als einfaches Int(). Ideal zum Parsen gemischter Daten.
4. Benutzerdefinierte Funktion: Manuelles Parsen für maximale Geschwindigkeit
\n\nWenn 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\nfunc fastInt(from string: String) -> Int? {\n var result = 0\n var isNegative = false\n var started