Pesquisar

domingo, 9 de setembro de 2018

String e Substring

Em Swift uma String é composta por caracteres que são representados por grafemas e possuem uma representação mínima do sistema de escrita. Por exemplo quando utilizamos emojis em mensagens, eles são na verdade códigos unicode em que é convertido para imagens ou para algum outro caractere, por exemplo:


Esse emoji, possui como código o valor \u{270b}, quando utlizado em na String, ele possui a interpretação de um único caracter:

import Foundation
let emoji = "\u{270b}" //✋
emoji.count // 1
view raw RaiseHand.swift hosted with ❤ by GitHub

Porém temos como resultado a imagem ou quando utilizamos um caractere como uma letra com acento ã e que podemos representar da seguinte forma:

import Foundation
var character = "\u{00E3}" //ã
//ou podemos fazer uma combinação do unicode, da seguinte forma:
character = "\u{61}\u{303}" //ã
view raw Acento.swift hosted with ❤ by GitHub

Mas o que é o Unicode?


É um padrão que permite a interpretação/manipulação dos computadores ao texto. Os mais conhecidos são UTF-8 e UTF-16, sendo UTF (Formato de Transformação Unicode que em inglês é Unicode Transformation Format) e o número em seguida tem como objetivo informar o número de bits por código.

O UTF-8 é o mais usado e compatível com o código ASCII. Conheça a lista do unicode através do site - http://www.unicode.org/Public/UCD/latest/charts/CodeCharts.pdf
Uma das mudanças em relação a String é em relação a composição através de um lista de caracteres e até o Swift 3.0 você deveria acessar da seguinte forma:

import Foundation
let string = "Olá!"
for c in string.characters {
print("\(c)") //O,l,á,!
}

Agora a String é realmente tratada como uma lista de caracteres e você consegue percorrer os caracteres da seguinte forma com Swift 4:

import Foundation
let string = "Olá!"
for c in string {
print("\(c)") //O,l,á,!
}

Várias mudanças já foram feitas, na própria documentação constam 131 modificações e 87 novas funcionalidades na API.

Substring


A Substring representa uma parte da string e implementa o mesmo protocolo StringProtocol. O ganho nisso foi em relação a memória, pois agora a memória é compartilhada quando se trata da string original e ainda possui a mesma interface que a String.

import Foundation
let string = "Olá! 👋"
let index = string.index(of: "!")!
let substring = string[...index] //Olá!
//Vocâ também pode criar uma string inicializando com uma substring, basta utilizar o inicializador:
let newString = String(substring)
view raw gistfile1.swift hosted with ❤ by GitHub

Esse artigo foi uma breve introdução do que serão os próximos relacionados a String e Substring.