Nova vida das strings em Swift: adeus, substring, olá, slicing

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como deixar de ter medo de deprecated e amar o slicing em Swift



Se você já escreveu código em Swift e tentou cortar parte de uma string, certamente já se deparou com esta mensagem assustadora: 'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator. Parece uma sentença? Na verdade, é um convite para um mundo novo, mais seguro e poderoso de trabalhar com strings. Vamos entender o que aconteceu, por que a Apple decidiu mudar a API familiar e como agora "cortar" strings corretamente no Swift 4 e versões posteriores.



Por que o substring ficou no passado?



O bom e velho substring(to:) funcionava, mas não era... muito inteligente. Ele retornava um novo objeto Substring que, na prática, era apenas uma "janela" para a string original. Isso gerava confusão: você achava que estava trabalhando com uma string independente, mas na verdade mantinha uma referência à memória antiga. No Swift 4, decidiram organizar as coisas: agora todas as operações com substrings retornam o tipo Substring, e para obter uma string completa, é necessário converter explicitamente o resultado. Parece mais complicado? Na prática, é muito mais claro e seguro.



Conheça: String slicing subscript



A nova abordagem usa subscripts e ranges (intervalos). Em vez dos métodos substring(to:), substring(from:) e substring(with:), você agora escreve código que se parece com a manipulação de arrays. Aqui está uma analogia básica:



let fullString = "Olá, mundo!"// Método antigo (deprecated)// let oldResult = fullString.substring(to: fullString.index(fullString.startIndex, offsetBy: 4))

// Novo métodolet newResult = fullString[..<fullString.index(fullString.startIndex, offsetBy: 4)]print(newResult) // "Olá"


Viu o operador ..<? Este é o famoso partial range from operator — um intervalo parcial "do início até o índice especificado, sem incluí-lo". Poderoso, não?



Os três pilares da nova abordagem: from, to, through



Vamos analisar os três cenários principais que antes eram cobertos pelos métodos substring.



1. substring(to:) → prefix(upTo:) ou intervalo parcial

Quer pegar tudo até um determinado índice? Use ..< (half-open range) ou o método prefix(upTo:):



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

// Opção com subscriptlet result1 = str[..<index]print(result1) // "Olá"

// Opção com métodolet result2 = str.prefix(upTo: index)print(result2) // "Olá"


2. substring(from:) → suffix(from:) ou intervalo parcial

Precisa pegar tudo de um índice até o final? Use ... (closed range) com o início omitido:



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

// Ou com métodolet result4 = str.suffix(from: startIndex)print(result4) // "Swift"


3. substring(with:) → intervalo comum

Quer cortar um trecho específico? Basta especificar o intervalo:



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

// Ou com closed rangelet closedRange = str.index(str.startIndex, offsetBy: 5)...str.index(before: str.endIndex)let result6 = str[closedRange]print(result6) // "Swift"


Observe: todas essas operações retornam Substring, não String. Se você precisar de uma string completa, basta envolver o resultado em String():



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


E o prefix e suffix? Eles não estão obsoletos!



Sim, os métodos prefix(_:), suffix

Blogs

Book Recommendations