Recorte de cadenas en Swift: ¿existe un método trim() para String?

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

«¿Y dónde está mi .trim()?» — o por qué Swift no es Python

\n\n

Si vienes a Swift desde Python o JavaScript, seguramente estás acostumbrado a la simple llamada " hola ".trim() o " hola ".strip(). Y entonces escribes tu primer código en Swift, intentas hacer lo mismo y obtienes un error de compilación. ¿Te suena familiar?

\n\n

En Stack Overflow esta pregunta ha recibido miles de visitas, y con razón. En Swift no existe el método .trim() para String. Pero esto no significa que no se puedan recortar espacios y caracteres. Simplemente el enfoque es diferente, más al estilo Swift. Vamos a aclararlo de una vez por todas.

\n\n

En este artículo no solo responderemos a la pregunta principal, sino que también mostraremos ejemplos de código reales que podrás insertar directamente en tu proyecto. ¡Allá vamos!

\n\n

Respuesta breve: sí, pero no como estás acostumbrado

\n\n

En Swift no existe un único método .trim(). En su lugar, se utiliza una familia de métodos del protocolo Foundation:

\n\n
    \n
  • trimmingCharacters(in:) — la herramienta principal
  • \n
  • .trimmingCharacters(in: .whitespacesAndNewlines) — la opción más popular
  • \n
\n\n

¿Suena escueto? En la práctica, esto ofrece flexibilidad: tú decides qué caracteres exactos quieres recortar, sin depender de la «magia» de un método incorporado.

\n\n

Cómo funciona trimmingCharacters — análisis con ejemplos

\n\n

Ejemplo básico: eliminar espacios y saltos de línea

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

Observa que debemos importar Foundation. Sin esto, el método no está disponible, ya que está definido en NSString, que se «mezcla» con el String de Swift a través de un puente.

\n\n

Solo espacios (sin eliminar saltos de línea)

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

¿Ves? El salto de línea se mantiene. Esto es útil cuando quieres conservar el formato pero eliminar los espacios sobrantes en los bordes.

\n\n

Recorte de caracteres arbitrarios

\n\n

En CharacterSet se puede pasar cualquier conjunto:

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

¿Y qué hay de trimLeft / trimRight (ltrim / rtrim)?

\n\n

En Python existen .lstrip() y .rstrip(). En Swift, no. Pero esto se puede implementar fácilmente de forma manual. Aquí tienes dos extensiones simples que puedes añadir a tu proyecto:

\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// Ejemplo de uso:\nlet text = "   Hola Mundo   "\nprint(text.trimmingLeft())  // "Hola Mundo   "\nprint(text.trimmingRight()) // "   Hola Mundo"
\n\n

Ahora tienes trimLeft y trimRight completos, como en tu querido Python. Guarda este código en un archivo aparte, te será útil.

\n\n

P

Blogs

Book Recommendations