Prefacio
Agregar características o azúcar de sintaxis a las cadenas de texto es común en varios lenguajes de programación. Tome el lenguaje C con el que todos están familiarizados, por ejemplo. Una cadena C es esencialmente una matriz de caracteres, pero cada vez que ingresa una cadena, no necesita ingresar ['H', 'E', 'L', 'L', 'O'], solo presione Hello, porque el compilador hace esta operación por usted.
Lenguajes más avanzados, como las cadenas de manijas rápidas, no solo como matrices de personajes, la cadena es un tipo completo y tiene varias características. Primero veamos una característica de String: Substring.
Echa un vistazo a la cadena
Primero, tomemos una comprensión aproximada de la implementación de cuerdas. El siguiente código proviene de String.swift en la biblioteca estándar:
Struct Struct Public {public var _core: _StringCore}Por supuesto, hay algunas otras configuraciones de inicialización, ¡pero solo hay este atributo de almacenamiento en la declaración! El secreto debe estar en stringcore.swift:
Public Struct _StringCore {public var _baseAddress: UnsafemutableRawPointer? var _countandflags: uint public var _Owner: AnyObject?}Hay muchas otras cosas en este tipo, pero solo nos centramos en las propiedades de almacenamiento:
La situación real de _Stringcore es mucho más complicada de lo mencionado aquí, pero el contenido anterior hace que sea más fácil comprender información sobre las cuerdas: el almacenamiento interno y el tamaño de las cuerdas.
Subconocencia
¿Cómo crear una subcadena en Swift? La forma más fácil es tomar un párrafo de String por subíndice:
Str = "¡Hola Swift!" Slice = str [str.startindex .. <str index = "" str = "" startIndex = "" nbsp = "" offsetby: = "" 5 = "" hello = "> </tr>
Aunque es simple, el código no parece demasiado elegante.
El índice de cadena no es un entero intuitivo, por lo que el índice de posición durante la interceptación debe obtenerse utilizando StartIndex e índice (_: Offsetby :). Si se intercepta desde la posición inicial de la cadena, puede omitir StartIndex:
Sea withPartialRange = str [.. <str index = "" str = "" startIndex = "" nbsp = "" offsetBy: = "" 5 = "" still = "" hello = ""> </tr>
O use este método en la colección:
Dejar slice = str.prefix (5) // todavía "hola"
Recuerde que las cadenas también son colecciones, por lo que puede usar métodos en colecciones, como prefijo (), sufix (), dropfirst (), etc.
Los principios internos de la subcadena
Subcando un lugar mágico es que reutilizan la memoria de la cadena principal. Puede comprender la subcadena como uno de los párrafos de la cadena principal.
Por ejemplo, si corta 100 caracteres de una cadena de caracteres 8000, no necesita reinicializar el espacio de memoria de 100 caracteres.
Esto también significa que puede extender accidentalmente el ciclo de vida de la cadena principal. Si hay una cadena grande, entonces solo intercepta un segmento pequeño, siempre que no se libere la cadena de segmento pequeño interceptado, la cadena de segmento grande no se liberará.
¿Cómo se hace la subcadena?
Public Struct Subcubing {interner var _slice: RangePracableBideDirectionalSlice <String> </String>El atributo interno _lice contiene toda la información sobre la cadena principal:
// todavía dentro de substringinternal var _wholestring: string {return _slice._base} public var startIndex: index {return _slice.startindex} public var endindex: index {return _slice.endindex}Calcule la propiedad _wholestring (devuelve toda la cadena principal), StartIndex y EndIndex se devuelven a través del _slice interno.
También se puede ver cómo Slice se refiere a la cadena principal.
Subcadera a cadena
Finalmente, puede haber muchos sustros en el código, pero el tipo de parámetro de la función requiere cadena. El proceso de convertir la subcadena a cadena también es muy simple:
Let String = String (subcadena)
Debido a que las subcadenas comparten el mismo espacio de memoria que su cadena principal, se adivina que crear una nueva cadena debería inicializar un nuevo espacio de almacenamiento. Entonces, ¿cuál es el proceso de inicializar la cadena?
cadena de extensión {public init (_ Substring: Subtring) {// 1 LET x = subString._Wholestring // 2 Let inicio = substring.StartIndex let End = substring.endindex // 3 let u16 = x._core [start.encodoffset .. <End encodeffset = "nbsp =" 4a = "si =" "" "" "" "" "" "" en: = "" x = "" unicodescalar = "" end = "" self = "" 4b = "" else = ""> </ind>Los pasos para convertir la subcadena a cadena son muy simples, pero es posible que desee considerar si necesita hacer esto. ¿Necesita que el tipo sea una cadena al realizar operaciones de subcadena? Si todas las operaciones en la subcadena deben convertirse en String, la subcadena ligera perderá su significado.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.