Neues Leben für Strings in Swift: Tschüss, substring, hallo, slicing

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

Wie Sie aufhören, deprecated zu fürchten, und Slicing in Swift annehmen



Wenn Sie jemals Code in Swift geschrieben und versucht haben, einen Teil einer Zeichenkette auszuschneiden, sind Sie wahrscheinlich auf diese erschreckende Nachricht gestoßen: 'substring(to:)' ist deprecated: Bitte verwenden Sie den String-Slicing-Subscript mit einem 'partial range from'-Operator. Klingt wie ein Todesurteil? In Wirklichkeit ist es eine Einladung in eine neue, sicherere und leistungsfähigere Welt der Arbeit mit Zeichenketten. Lassen Sie uns herausfinden, was passiert ist, warum Apple die vertraute API geändert hat und wie man Zeichenketten in Swift 4 und neuer richtig "sliced".



Warum wurde substring zur Vergangenheit?



Das gute alte substring(to:) funktionierte, aber es war ... nicht sehr intelligent. Es gab ein neues Substring-Objekt zurück, das im Wesentlichen nur ein "Fenster" in die ursprüngliche Zeichenkette war. Dies führte zu Verwirrung: Sie dachten, Sie arbeiteten mit einer unabhängigen Zeichenkette, aber in Wirklichkeit hielten Sie eine Referenz auf den alten Speicher. In Swift 4 beschloss man, aufzuräumen: Jetzt geben alle Substring-Operationen den Typ Substring zurück, und um eine vollwertige Zeichenkette zu erhalten, müssen Sie das Ergebnis explizit konvertieren. Klingt komplizierter? In der Praxis ist es viel klarer und sicherer.



Lernen Sie kennen: String slicing subscript



Der neue Ansatz verwendet Subscripts und Ranges. Anstelle der Methoden substring(to:), substring(from:) und substring(with:) schreiben Sie jetzt Code, der wie die Arbeit mit Arrays aussieht. Hier ist eine grundlegende Analogie:



let fullString = "Привет, мир!"// Alter Weg (deprecated)// let oldResult = fullString.substring(to: fullString.index(fullString.startIndex, offsetBy: 6))

// Neuer Weglet newResult = fullString[..<fullString.index(fullString.startIndex, offsetBy: 6)]print(newResult) // "Привет"


Sehen Sie den ..<-Operator? Das ist genau der partial range from operator — ein Teilbereich "von Anfang an bis zum, aber ohne den angegebenen Index". Mächtig? Und ob.



Die drei Säulen des neuen Ansatzes: from, to, through



Lassen Sie uns die drei Hauptszenarien aufschlüsseln, die die substring-Methoden früher abgedeckt haben.



1. substring(to:) → prefix(upTo:) oder ein Teilbereich

Möchten Sie alles bis zu einem bestimmten Index nehmen? Verwenden Sie ..< (halboffener Bereich) oder die Methode prefix(upTo:):



let str = "Hello, Swift"let index = str.firstIndex(of: ",") ?? str.endIndex

// Option mit Subscriptlet result1 = str[..<index]print(result1) // "Hello"

// Option mit Methodelet result2 = str.prefix(upTo: index)print(result2) // "Hello"


2. substring(from:) → suffix(from:) oder ein Teilbereich

Müssen Sie alles von einem Index bis zum Ende nehmen? Verwenden Sie ... (geschlossener Bereich) mit weggelassenem Start:



let startIndex = str.index(str.startIndex, offsetBy: 7)let result3 = str[startIndex...]print(result3) // "Swift"

// Oder via Methodelet result4 = str.suffix(from: startIndex)print(result4) // "Swift"


3. substring(with:) → ein normaler Bereich

Möchten Sie ein bestimmtes Stück extrahieren? Geben Sie einfach den Bereich an:



let range = str.index(str.startIndex, offsetBy: 7)..<str.endIndexlet result5 = str[range]print(result5) // "Swift"

// Oder via geschlossenen Bereichlet closedRange = str.index(str.startIndex, offsetBy: 7)...str.index(before: str.endIndex)let result6 = str[closedRange]print(result6) // "Swift"


Hinweis: Alle diese Operationen geben Substring zurück, nicht String. Wenn Sie eine vollwertige Zeichenkette benötigen, umschließen Sie das Ergebnis einfach mit String():



let newString = String(result1)print(type(of: newString)) // String


Was ist mit prefix und suffix? Sie sind nicht deprecated!



Ja, die Methoden prefix(_:), suffix

Blogs

Buchempfehlungen