"Onde está meu .trim()?" — ou por que Swift não é Python
\n\nSe 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?
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.
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\nResposta rápida: sim, mas não como você está acostumado
\n\nEm Swift, não há um único método .trim(). Em vez disso, usa-se uma família de métodos do protocolo Foundation:
- \n
trimmingCharacters(in:)— a ferramenta principal \n .trimmingCharacters(in: .whitespacesAndNewlines)— a opção mais popular \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\nComo funciona trimmingCharacters — análise com exemplos
\n\nExemplo básico: remoção de espaços e quebras de linha
\n\nimport Foundation\n\nlet text = " Olá, Swift! \\n"\nlet trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines)\nprint(trimmed) // "Olá, Swift!"\n\nObserve: 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.
Apenas espaços (sem remover quebras de linha)
\n\nlet textWithNewline = " Olá\\n"\nlet onlySpacesTrimmed = textWithNewline.trimmingCharacters(in: .whitespaces)\nprint(onlySpacesTrimmed) // "Olá\\n"\n\nViu? A quebra de linha permaneceu. Isso é útil quando você quer manter a formatação, mas remover espaços extras nas bordas.
\n\nCortando caracteres arbitrários
\n\nVocê pode passar qualquer conjunto para CharacterSet:
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\nE quanto ao trimLeft / trimRight (ltrim / rtrim)?
\n\nEm 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:
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\nAgora você tem trimLeft e trimRight completos, como no amado Python. Salve este código em um arquivo separado — será útil.