Prefácio
A adição de recursos ou o açúcar de sintaxe às seqüências de texto é comum em várias linguagens de programação. Veja o idioma C com o qual todos estão familiarizados, por exemplo. Uma string c é essencialmente uma matriz de caracteres, mas toda vez que você insere uma string, não precisa entrar ['h', 'e', 'l', 'l', 'o'], basta bater olá, porque o compilador faz esta operação para você.
Idiomas mais avançados, como Swift, lida com cordas não apenas como matrizes de caracteres, a string é um tipo completo e possui várias características. Vamos primeiro olhar para um recurso da String: Substring.
Dê uma olhada na string
Primeiro, vamos entender difícil a implementação de cordas. O código a seguir vem de String.swift na biblioteca padrão:
public struct string {public var _core: _stringcore}É claro que existem outras configurações de inicialização, mas há apenas esse atributo de armazenamento na declaração! O segredo deve estar em stringcore.swift:
public struct _StringCore {public var _baseAddress: insafemutableRawPointer? var _countandflags: uint public var _owner: anyObject?}Existem muitas outras coisas nesse tipo, mas nos concentramos apenas nas propriedades de armazenamento:
A situação real do _StringCore é muito mais complicada do que mencionada aqui, mas o conteúdo acima facilita a compreensão de algumas informações sobre strings: o armazenamento interno e o tamanho das strings.
Substring
Como criar uma substring no Swift? A maneira mais fácil é pegar um parágrafo da string por subscrito:
Seja str = "Olá Swift!" Deixe Slice = str [str.startIndex .. <str index = "" str = "" startIndex = "" nbsp = "" offsetby: = "" 5 = "" hello = ""> </str>
Embora seja simples, o código não parece muito elegante.
O índice de string não é um número inteiro intuitivo; portanto, o índice de posição durante a interceptação precisa ser obtido usando o startIndex e o índice (_: offsetby :). Se você interceptar a partir da posição inicial da string, poderá omitir o startIndex:
Deixe withPartialRange = str [.. <str index = "" str = "" startIndex = "" nbsp = "" offsetby: = "" 5 = "" ainda = "" hello = ""> </str>
Ou use este método na coleção:
Deixe Slice = Str.Prefix (5) // Still "Hello"
Lembre -se de que as cordas também são coleções, para que você possa usar métodos sob coleções, como prefix (), sufixo (), dropfirst (), etc.
Os princípios internos da substring
Substring Um local mágico é que eles reutilizam a memória da sequência pai. Você pode entender a substring como um dos parágrafos da sequência pai.
Por exemplo, se você cortar 100 caracteres de uma corda de 8000 caracteres, não precisará reinicializar o espaço de memória de 100 caracteres.
Isso também significa que você pode estender acidentalmente o ciclo de vida da sequência pai. Se houver uma corda grande, basta interceptar um segmento pequeno, desde que a string de segmento pequena interceptada não seja liberada, a string de segmento grande não será lançada.
Como a substring é feita?
Public Struct Substring {interno var _slice: rangeReplaceablebidirectionalslice <string> </string>O atributo _slice interno mantém todas as informações sobre a sequência pai:
// ainda dentro de substringInternal var _whestring: string {return _slice._base} public var startIndex: index {return _slice.startindex} public var endindex: index {return _slice.endindex}Calcule a propriedade _wholestring (retorna toda a sequência pai), StartIndex e EndIndex são retornados pela _slice interna.
Também pode ser visto como a fatia se refere à sequência pai.
Substring para string
Finalmente, pode haver muitas substâncias no código, mas o tipo de parâmetro da função requer string. O processo de conversão de substring para string também é muito simples:
Deixe String = String (substring)
Como as substringas compartilham o mesmo espaço de memória que sua string pai, é adquirido que a criação de uma nova string deve inicializar um novo espaço de armazenamento. Então, qual é o processo de inicializar a string?
Extensão String {public init (_ Substring: Substring) {// 1 Seja x = substring._wholestring // 2 Seja start = substring.startIndex let end = substring.endIndex // 3 let u16 = x._core [start.encodOffset .. <final codpedEftset = "nbs nbs =" "" In: = "" x = "" unicodescalars = "" end = "" self = "" 4b = "" else = ""> </nd>As etapas para converter substring em string são muito simples, mas você pode considerar se precisa fazer isso. Você precisa que o tipo seja string ao executar operações de substring? Se todas as operações na substring precisarem ser convertidas em string, a substring leve perderá seu significado.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.