Vorwort
Das Hinzufügen von Funktionen oder Syntaxzucker zu Textzeichenfolgen ist in verschiedenen Programmiersprachen üblich. Nehmen Sie die C -Sprache, mit der jeder zum Beispiel vertraut ist. Eine C -String ist im Wesentlichen ein Zeichenarray, aber jedes Mal, wenn Sie eine Zeichenfolge eingeben, müssen Sie ['H', 'E', 'L', 'L', 'O'] nicht eingeben, einfach Hallo, weil der Compiler diese Operation für Sie durchführt.
Fortgeschrittene Sprachen wie Swift -Griffe nicht nur als Zeichenanordnungen, die String ist ein vollständiger Typ und hat verschiedene Eigenschaften. Schauen wir uns zunächst eine Funktion von String: Substring an.
Schauen Sie sich die Zeichenfolge an
Nehmen wir zunächst ein grobes Verständnis für die Umsetzung von Strings. Der folgende Code stammt von String.wift in der Standardbibliothek:
public struct String {public var _core: _stringcore}Natürlich gibt es einige andere Initialisierungseinstellungen, aber es gibt nur dieses Speicherattribut in der Erklärung! Das Geheimnis muss in Stringcore.wift sein:
public struct _stringcore {public var _baseaddress: unafemutablerAwpointer? var _countandFlags: uint public var _owner: AnyObject?}Es gibt viele andere Dinge in diesem Typ, aber wir konzentrieren uns nur auf Speichereigenschaften:
Die reale Situation von _StringCore ist viel komplizierter als hier erwähnt, aber der obige Inhalt erleichtert das Verständnis einiger Informationen über Zeichenfolgen: die interne Speicherung und Größe der Zeichenfolgen.
Substring
Wie erstelle ich ein Substring in Swift? Der einfachste Weg ist es, einen Absatz von der Zeichenfolge nach dem Index zu nehmen:
Sei Str = "Hallo Swift!" Sei Slice = Str [str.startIndex .. <str index = "" str = "" startindex = "" nbsp = "" Offsetby: = "" 5 = "" Hallo ""> </str>
Obwohl es einfach ist, sieht der Code nicht zu elegant aus.
Der Stringindex ist keine intuitive Ganzzahl, daher muss der Positionsindex während der Abnahme unter Verwendung von StartIndex und Index (_: Offsetby :) erhalten werden. Wenn Sie von der Startposition der Zeichenfolge abfangen, können Sie StartIndex weglassen:
withPartialRange = str [.. <str index = "" str = "" startIndex = "" nbsp = "" Offsetby: = "" 5 = "" still = "" hello = ""> </str>
Oder verwenden Sie diese Methode in der Sammlung:
Lassen Sie Slice = Str.Prefix (5) // immer noch "Hallo"
Denken Sie daran, dass Saiten auch Sammlungen sind, sodass Sie Methoden unter Sammlungen wie Präfix (), Suffix (), DropFirst () usw. verwenden können.
Die internen Prinzipien des Substrings
Substrieren eines magischen Ortes ist, dass sie die Erinnerung an die übergeordnete Zeichenfolge wiederverwenden. Sie können Substring als einen der Absätze der übergeordneten Zeichenfolge verstehen.
Wenn Sie beispielsweise 100 Zeichen aus einer 8000 -Zeichen -Zeichenfolge schneiden, müssen Sie den 100 -Zeichenspeicherraum nicht neu initialisieren.
Dies bedeutet auch, dass Sie versehentlich den Lebenszyklus der übergeordneten Zeichenfolge erweitern können. Wenn es eine große Saite gibt, fangen Sie nur ein kleines Segment ab, solange der abgefangene kleine Segment -String nicht freigegeben wird, wird die große Segment -Zeichenfolge nicht freigegeben.
Wie wird Substring erledigt?
public struct substring {internal var _Slice: rangereplacableBidirectionalLice <string> </string>Das interne Attribut für _SLICE enthält alle Informationen zur übergeordneten Zeichenfolge:
// immer noch in substringInternal var _wholestring: String {return _slice._base} public var startIndex: index {return _slice.startindex} public var endindex: index {return _slice.endindex}}Berechnen Sie die Eigenschaft _wholestring (gibt die gesamte übergeordnete Zeichenfolge zurück), startIndex und EndIndex zurückgegeben werden.
Es ist auch zu sehen, wie sich Slice auf die übergeordnete Zeichenfolge bezieht.
Substring zu String
Schließlich kann es im Code viele Substrings geben, aber der Parametertyp der Funktion erfordert String. Der Prozess der Konvertierung von Substring in String ist ebenfalls sehr einfach:
Sei String = String (Substring)
Da Substrings den gleichen Speicherplatz wie seine übergeordnete Zeichenfolge teilt, wird er vermutet, dass das Erstellen einer neuen Zeichenfolge einen neuen Speicherplatz initialisieren sollte. Was ist der Prozess der Initialisierung der Zeichenfolge?
Erweiterungsstring {public init (_ substring: substring) {// 1 let x = substring._wholestring // 2 lass start = substring.startIndex let end = substring.endindex // 3 let u16 = x._core [start.encodedOffset .. <endcodedOffset = "nbSP =" 4A "" "" "" "" "". " in: = "" x = "" unicodescalars = "" end = "" self = "" 4b = "" else = ""> </end>Die Schritte zur Umwandlung von Substring in die Zeichenfolge sind sehr einfach, aber Sie möchten möglicherweise überlegen, ob Sie dies tun müssen. Benötigen Sie, dass der Typ bei der Durchführung von Substringoperationen String ist? Wenn alle Operationen auf Substring in String umgewandelt werden müssen, verliert das leichte Substring seine Bedeutung.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.