Saltar al contenido →

¿Cómo se hace “esto” en un String de Swift?

Trabajar con cadenas de texto es algo que cualquier desarrollador del mundo hace a diario muchas veces.

Vamos a dar un repaso a la clase String de Swift para ver que nos ofrece esta estructura y como nos puede ayudar en nuestro día a día.

Creando un String

Esto es lo primero que tenemos que saber, cómo se puede crear un String. Hay al menos tres formas de hacerlo:

  1. Asignado un valor (en una sola línea)
  2. Usan el inicializador de la estructura
  3. Asignado un valor, pero en este caso puede admitir varías líneas, tabuladores, etc.

¿Cuántos caracteres tiene el String?

Otro de los grandes clásicos. ¿Cuánto mide el String? La propiedad count nos dirá el número de caracteres que forman la cadena de texto.

Mención especial tienen el uso de los emoji dentro de String. Por defecto se cuenta como si de un único carácter se tratara, pero si decidimos usar alguna de las representaciones UTF de String, utf-8, utf-16, el valor de count varía.

  • Para unicodeScalars un emoji cuenta como 2 caracteres
  • En utf16 son 4 caracteres
  • Y en utf8 cuenta como 8 caracteres.

¿Cómo sé si un String está vacío?

Otro de los grandes clásicos de la programación. Y no, los espacios en blanco no son cadenas vacías.

Concatenar dos o más String

Aquí podemos usar las funciones de String o usar la sobrecarga de operadores, lo que nos sea más cómodo.

Hay que pensar en como vamos a declarar los String si var (mutable) o let (inmutable) ya que esto determina que operaciones y operadores podremos usar.

¿Cómo convierto un array de String en un String?

De vez en cuando se nos presenta esta disyuntiva. En esta caso lo resolvemos usando la función reduce para aplanar el array y convertirlo en un String

¿Cómo inserto un String dentro de otro?

Añadir un String en otro, así que esta función es mutating, por lo que el String debe declararse como var.

Empezamos a ver uno de los “amigos” que tendremos al menejar String con Swift. Los índices, en este caso String.Index

String Interpolation. Que es y porque mola tanto

Para mí, de lo mejor que tiene manejar strings con Swift.

Basicamente es construir un String usando una plantilla en la que podemos meter otras String o cualquier cosa susceptible de convertirse en texto.

Dentro de la “plantilla” indicamos el lugar de cada variable mediante la sintaxis \(nombreVariable)

¿Cómo sustituyo un String dentro de otro String? Replace + Range + Index

Aquí ya empezamos a ver el uso intensivo de ‘String.Indexy deRange` para poder establecer el área de sustitución.

Podemos hacerlo de una forma rápida con una sencilla llamada a la función replacingOccurrences(of:with:) que nos da el bridge entre NSString y Swift.

De todas formas conviene sentirse cómodo con el manejo de índices y rangos ya que habrá veces que no podremos trabajar de otra manera.

¿Cómo añado caracteres a la izquierda o la derecha de un String?

A quien no le ha pasado eso de…

…la salida tiene que estar alineada a la derecha y los números con un 0 por delante. Y con una longitud de 5 caracteres…

Curiosamente la libreria estándar de Swift o el framework Foundation sólo tiene una función padding que añade caracteres a la derecha.

Si queremos añadir a la izquierda tenemos que crearnos nuestra propia función padding. En el siguiente snippet podrás encontrar un extensión para String que añade caracteres a la izquierda de una cadena de texto.

¿Cómo sé si un String está dentro de otro?

Que si una cadena de texto empieza por esto, que si termina en esto otro, que si mira a ver si tiene este texto por ahí metido…

Menos mal que podemos usar hasPrefix, hasSuffix y contains para ayudarnos.

Mayúsculas, Minúsculas…

También. En Swift podemos poner un texto en mayúsculas, minúsculas o poner en mayúsculas la primera letra de cada palabra.

Quitar caracteres y strings en un String

Vamos a eliminar caracteres, uno o varios, dentro de una cadena. Las distintas funciones remove son de carácter mutating, así que operan sobre la cadena.

¿Qué hace drop en un String? ¿Para qué sirve?

Acabamos de ver remove ¿verdad? Pues las operaciones drop hacen lo mismo pero sin modificar la cadena, es decir, que crean una nueva cadena con el resultado de la operación drop.

¿Cómo obtengo un número determinado de caracteres del principio de un String?

Sin complicaciones. Usamos la función prefix a la que le pasamos la cantidad de caracteres que queremos recuperar desde el inicio de la cadena de texto y listo.

¿Se puede recuperar el contenido de una URL? ¡Pues claro!

Uno de los inicializadores de la estructura String nos permite pasarle como parámetro una URL, y String solita se descargará el contenido.

Hay que usar el init(contentsOf:encoding:), ya que si usamos el init(contentsOf:) no obtendremos nada.

De String a Data y otra vez a String

Recuperar documentos JSON con URLSession es lo que tiene, que los descarga como Data. Menos mal que los chicos de Cupertino han pensado en ello y tenemos formas muy fáciles de pasar de Data a String y viceversa.

Dividir String. Split

De vuelta a los clásicos de las operaciones con Strings. Dividir una cadena de texto usando un separador. Chupado.

¿Cómo quito los espacio en blanco de un String? Y quien dice espacios en blanco dice otros caracteres…

A veces tenemos que eliminar espacios en blanco de una cadena si, por ejemplo, queremos convertir su contenido en un Int.

Pero quien dice espacios en blanco dice cualquier caracter. Gracias a la estructura CharacterSet tenemos a nuestra disposición juegos de caracteres predefinidos para distintos tipos de operaciones, desde quitar los espacio en blanco y retornos de carro hasta preparar nuestra cadena para que sea una URL válida.

Documentación

Publicado en Swift