Trimagem de Strings em Swift: existe um método trim() para String?

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

"Onde está meu .trim()?" — ou por que Swift não é Python

\n\n

Se você veio para Swift vindo de Python ou JavaScript, provavelmente está acostumado com a chamada simples " hello ".trim() ou " hello ".strip(). E então você escreve seu primeiro código em Swift, tenta fazer o mesmo — e recebe um erro de compilação. Situação familiar?

\n\n

No Stack Overflow, essa pergunta tem milhares de visualizações, e não é à toa. Em Swift, não existe um método .trim() para strings. Mas isso não significa que não seja possível cortar espaços e caracteres. A abordagem é diferente — mais ao estilo Swift. Vamos entender de uma vez por todas.

\n\n

Neste artigo, não apenas responderemos à pergunta principal, mas também mostraremos exemplos reais de código que você pode usar imediatamente em seu projeto. Vamos lá!

\n\n

Resposta rápida: sim, mas não como você está acostumado

\n\n

Em Swift, não há um único método .trim(). Em vez disso, usa-se uma família de métodos do protocolo Foundation:

\n\n
    \n
  • trimmingCharacters(in:) — a ferramenta principal
  • \n
  • .trimmingCharacters(in: .whitespacesAndNewlines) — a opção mais popular
  • \n
\n\n

Parece prolixo? Na prática, isso oferece flexibilidade: você decide exatamente quais caracteres deseja cortar, em vez de depender da "mágica" de um método embutido.

\n\n

Como funciona trimmingCharacters — análise com exemplos

\n\n

Exemplo básico: remoção de espaços e quebras de linha

\n\n
import Foundation\n\nlet text = "   Olá, Swift!   \\n"\nlet trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines)\nprint(trimmed) // "Olá, Swift!"
\n\n

Observe: precisamos importar o Foundation. Sem ele, o método não está disponível, pois é definido em NSString, que é "misturado" à string do Swift por meio de uma ponte.

\n\n

Apenas espaços (sem remover quebras de linha)

\n\n
let textWithNewline = "  Olá\\n"\nlet onlySpacesTrimmed = textWithNewline.trimmingCharacters(in: .whitespaces)\nprint(onlySpacesTrimmed) // "Olá\\n"
\n\n

Viu? A quebra de linha permaneceu. Isso é útil quando você quer manter a formatação, mas remover espaços extras nas bordas.

\n\n

Cortando caracteres arbitrários

\n\n

Você pode passar qualquer conjunto para CharacterSet:

\n\n
let email = "  usuario@exemplo.com  "\nlet cleaned = email.trimmingCharacters(in: .whitespaces)\nprint(cleaned) // "usuario@exemplo.com"\n\nlet price = "$99.99"\nlet noDollar = price.trimmingCharacters(in: CharacterSet(charactersIn: "$"))\nprint(noDollar) // "99.99"
\n\n

E quanto ao trimLeft / trimRight (ltrim / rtrim)?

\n\n

Em Python, existem .lstrip() e .rstrip(). Em Swift — não. Mas isso é fácil de implementar manualmente. Aqui estão duas extensões simples que você pode adicionar ao seu projeto:

\n\n
import Foundation\n\nextension String {\n    func trimmingLeft(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n        var start = startIndex\n        while start < endIndex, characterSet.contains(self[start].unicodeScalars.first!) {\n            formIndex(after: &start)\n        }\n        return String(self[start..<endIndex])\n    }\n    \n    func trimmingRight(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n        var end = endIndex\n        while end > startIndex, characterSet.contains(self[index(before: end)].unicodeScalars.first!) {\n            formIndex(before: &end)\n        }\n        return String(self[startIndex..<end])\n    }\n}\n\n// Exemplo de uso:\nlet text = "   Hello World   "\nprint(text.trimmingLeft())  // "Hello World   "\nprint(text.trimmingRight()) // "   Hello World"
\n\n

Agora você tem trimLeft e trimRight completos, como no amado Python. Salve este código em um arquivo separado — será útil.

\n\n

P

Blogs

Book Recommendations