Führende Nullen in Int in Swift: Vom Chaos zur Ordnung

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

„Verschwundene“ Nullen: Warum Int keine führenden Nullen speichert und wie man damit lebt?

\n\n

Haben Sie jemals versucht, die Zahl 007 auf dem Bildschirm anzuzeigen und nur 7 erhalten? Ein bekanntes Problem? Willkommen im Club der Swift-Entwickler, die früher oder später auf die Frage stoßen: „Wie füge ich führende Nullen zu Int hinzu?“.

\n\n

Diese Frage auf Stack Overflow hat tausende Aufrufe, und das ist nicht verwunderlich. Es scheint eine einfache Aufgabe zu sein – eine Bestellnummer als „001234“ statt „1234“ anzuzeigen oder die Zeit als „09:05“ statt „9:5“. Aber Swift, als streng typisierte Sprache, trennt das Konzept „Zahl“ und „ihre String-Darstellung“. Int ist eine mathematische Entität. 007 ist für ihn einfach 7. Führende Nullen gehen bei der Initialisierung verloren.

\n\n

In diesem Artikel analysieren wir alle grundlegenden Ansätze zur Lösung dieses Problems. Sie erfahren, wie man ganze Zahlen richtig formatiert, welche Methode man für verschiedene Aufgaben wählt und wie man nicht in eine Performance-Falle tappt. Wir gehen den Weg von einfachen String-Masken bis zum leistungsstarken NumberFormatter aus Foundation. Los geht's!

\n\n

Warum kann Int „001“ nicht speichern? Eine kurze Einführung

\n\n

Bevor wir in den Code eintauchen, lassen Sie uns die Natur des Phänomens verstehen. Int in Swift ist eine 64-Bit (oder 32-Bit auf älteren Geräten) ganze Zahl mit Vorzeichen. Ihre interne Darstellung ist Binärcode. Eine Null links hat keine mathematische Bedeutung.

\n\n
let number = 007 // Fehler? Nein!\nprint(number) // Gibt aus: 7
\n\n

Der Swift-Compiler erlaubt es Ihnen nicht einmal, 007 im Code zu schreiben (es sei denn, es handelt sich um ein Literal im Oktalsystem, aber dort gibt es das Präfix 0o). Fazit: Führende Nullen sind ein Problem der Formatierung, nicht der Datenspeicherung. Wir lösen die Aufgabe auf der Darstellungsebene (UI, Logging, Export).

\n\n

Methode Nr. 1: Klassiker – String(format:)

\n\n

Die beliebteste Antwort auf Stack Overflow ist die Verwendung der Funktion String(format:), die von Objective-C (über die Brücke zu NSString) geerbt wurde. Dies ist eine schnelle und prägnante Methode.

\n\n

Beispiel: 3 führende Nullen hinzufügen

\n\n
let number = 7\nlet formatted = String(format: "%04d", number)\nprint(formatted) // "0007"
\n\n

Der Formatbezeichner %04d bedeutet:

\n
    \n
  • % – Beginn des Formatbezeichners;
  • \n
  • 0 – leere Stellen mit Nullen füllen, nicht mit Leerzeichen;
  • \n
  • 4 – minimale Feldbreite (4 Zeichen);
  • \n
  • d – dezimale ganze Zahl (Int).
  • \n
\n\n

Wenn die Zahl länger als 4 Zeichen ist (z.B. 12345), wird die Formatierung sie nicht abschneiden – Sie erhalten „12345“.

\n\n

Vor- und Nachteile

\n
    \n
  • Vorteile: Einfach, schnell, eine Zeile. Funktioniert in allen Swift-Versionen.
  • \n
  • Nachteile: Verwendet NSString unter der Haube, was etwas langsamer sein kann als eine reine Swift-Lösung. Man muss die C-style Formatierungssyntax kennen. Nicht lokalisiert (berücksichtigt keine Tausendertrennzeichen, falls benötigt).
  • \n
\n\n

Wann verwenden: Für einfache Fälle: Logs, Debugging, Ausgabe von IDs, wenn keine Lokalisierung erforderlich ist.

\n\n

Methode Nr. 2: Reines Swift – String(repeating:count:) + Suffix

\n\n

Wenn Sie die Objective-C-Brücke vermeiden und in „reinem“ Swift schreiben möchten, können Sie dies manuell tun. Dies ist eine hervorragende Übung zum Verständnis von Strings.

\n\n
extension Int {\n    func leadingZeros(_ totalDigits: Int) -> String {\n        let stringValue = String(self)\n        let zerosCount = max(0, totalDigits - stringValue.count)\n        return String(repeating: "0", count: zerosCount) + stringValue\n    }\n}\n\nlet number = 42\nprint(number.leadingZeros(5)) // "00042"
\n\n

Wie funktioniert das?

\n
    \n
  1. Wandelt Int in einen String um.
  2. \n
  3. Berechnet, wie viele Nullen hinzugefügt werden müssen: totalDigits - length. Wenn

Blogs

Buchempfehlungen