„Und wo ist mein .trim()?“ – oder warum Swift nicht Python ist
\n\nWenn Sie von Python oder JavaScript zu Swift kommen, sind Sie wahrscheinlich den einfachen Aufruf " hallo ".trim() oder " hallo ".strip() gewohnt. Und dann schreiben Sie Ihren ersten Code in Swift, versuchen dasselbe – und erhalten einen Kompilierungsfehler. Eine bekannte Situation?
Auf Stack Overflow hat diese Frage tausende Aufrufe, und das zu Recht. In Swift gibt es keine Methode .trim() für Zeichenketten. Das bedeutet aber nicht, dass man Leerzeichen und Zeichen nicht entfernen kann. Nur der Ansatz ist anders – eben Swift-way. Lassen Sie uns das ein für alle Mal klären.
In diesem Artikel beantworten wir nicht nur die Hauptfrage, sondern zeigen auch echte Codebeispiele, die Sie sofort in Ihr Projekt einfügen können. Los geht‘s!
\n\nKurze Antwort: Ja, aber nicht so, wie Sie es gewohnt sind
\n\nIn Swift gibt es keine einzelne Methode .trim(). Stattdessen wird eine Familie von Methoden aus dem Protokoll Foundation verwendet:
- \n
trimmingCharacters(in:)– das wichtigste Werkzeug \n .trimmingCharacters(in: .whitespacesAndNewlines)– die beliebteste Variante \n
Klingt wortkarg? In der Praxis bietet das Flexibilität: Sie entscheiden selbst, welche Zeichen Sie entfernen möchten, anstatt sich auf die „Magie“ einer eingebauten Methode zu verlassen.
\n\nWie trimmingCharacters funktioniert – Analyse anhand von Beispielen
\n\nBasisbeispiel: Entfernen von Leerzeichen und Zeilenumbrüchen
\n\nimport Foundation\n\nlet text = " Hallo, Swift! \\n"\nlet trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines)\nprint(trimmed) // "Hallo, Swift!"\n\nBeachten Sie: Wir müssen Foundation importieren. Ohne dieses ist die Methode nicht verfügbar, da sie in NSString definiert ist, das über eine Brücke an die Swift-Zeichenkette „angemischt“ wird.
Nur Leerzeichen (ohne Entfernen von Zeilenumbrüchen)
\n\nlet textWithNewline = " Hallo\\n"\nlet onlySpacesTrimmed = textWithNewline.trimmingCharacters(in: .whitespaces)\nprint(onlySpacesTrimmed) // "Hallo\\n"\n\nSehen Sie? Der Zeilenumbruch bleibt erhalten. Das ist praktisch, wenn Sie die Formatierung beibehalten, aber überflüssige Leerzeichen an den Rändern entfernen möchten.
\n\nEntfernen beliebiger Zeichen
\n\nIn CharacterSet kann jeder beliebige Satz übergeben werden:
let email = " user@example.com "\nlet cleaned = email.trimmingCharacters(in: .whitespaces)\nprint(cleaned) // "user@example.com"\n\nlet price = "$99.99"\nlet noDollar = price.trimmingCharacters(in: CharacterSet(charactersIn: "$"))\nprint(noDollar) // "99.99"\n\nUnd was ist mit trimLeft / trimRight (ltrim / rtrim)?
\n\nIn Python gibt es .lstrip() und .rstrip(). In Swift – nicht. Das lässt sich aber leicht manuell umsetzen. Hier sind zwei einfache Erweiterungen, die Sie in Ihr Projekt einfügen können:
import Foundation\n\nextension String {\n func trimmingLeft(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n var start = startIndex\n while start < endIndex, characterSet.contains(self[start].unicodeScalars.first!) {\n formIndex(after: &start)\n }\n return String(self[start..<endIndex])\n }\n \n func trimmingRight(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n var end = endIndex\n while end > startIndex, characterSet.contains(self[index(before: end)].unicodeScalars.first!) {\n formIndex(before: &end)\n }\n return String(self[startIndex..<end])\n }\n}\n\n// Beispiel zur Verwendung:\nlet text = " Hallo Welt "\nprint(text.trimmingLeft()) // "Hallo Welt "\nprint(text.trimmingRight()) // " Hallo Welt"\n\nJetzt haben Sie vollwertige trimLeft und trimRight, wie im geliebten Python. Speichern Sie diesen Code in einer separaten Datei – er wird sich als nützlich erweisen.