Introducción: Por qué dividir una cadena es una base que todo desarrollador Swift debe conocer
\n\nImagine la situación: está parseando un archivo CSV, procesando la entrada del usuario desde un campo de texto o analizando una cadena similar a JSON. ¿Qué hace? Correcto — divide la cadena en un array. La pregunta "Split a String into an array in Swift?" en Stack Overflow ha acumulado más de 20,000 visitas y se ha convertido en una de las más populares entre los desarrolladores iOS principiantes. ¿Por qué? Porque sin esta habilidad es imposible escribir ningún proyecto serio en Swift.
\n\nEn este artículo analizaremos todas las formas posibles de dividir una cadena en un array en Swift: desde el clásico components(separatedBy:) hasta el moderno split(separator:) y trucos ingeniosos con expresiones regulares. Aprenderá qué método elegir según la tarea y obtendrá ejemplos de código listos para usar que puede insertar directamente en su proyecto de Xcode.
1. Método clásico: components(separatedBy:)
\n\nEste método proviene de Objective-C y todavía se usa activamente. Es simple, claro y funciona como un reloj suizo. components(separatedBy:) devuelve un array de cadenas [String], separadas por el delimitador especificado.
import Foundation\n\nlet text = "manzana,plátano,naranja,kiwi"\nlet fruits = text.components(separatedBy: ",")\nprint(fruits) // ["manzana", "plátano", "naranja", "kiwi"]\n\nMatices importantes del método components(separatedBy:):
\n- \n
- El delimitador es una cadena. Se puede pasar cualquier
String, incluso de varios caracteres:"::"," - ". \n - Los elementos vacíos se conservan. Si no hay nada entre los delimitadores, aparecerá una cadena vacía en el array. \n
- Requiere import Foundation. Sin la importación, el método no está disponible. \n
let data = "a,,b,c"\nlet parts = data.components(separatedBy: ",")\nprint(parts) // ["a", "", "b", "c"]\n\nEste método es ideal cuando necesita dividir una cadena en un array en Swift de forma simple y rápida sin complicaciones innecesarias. Pero recuerde: no elimina las subcadenas vacías automáticamente.
\n\n2. Método moderno: split(separator:maxSplits:omittingEmptySubsequences:)
\n\nA partir de Swift 2.0, tenemos el método nativo split(). Es más flexible y "swifteado". A diferencia de components, split devuelve un array de Substring, no de String. Esto se hizo para optimizar el rendimiento: las subcadenas hacen referencia a la memoria de la cadena original.
let sentence = "El rápido zorro marrón salta sobre el perro perezoso"\nlet words = sentence.split(separator: " ")\nprint(words) // ["El", "rápido", "zorro", "marrón", "salta", "sobre", "el", "perro", "perezoso"]\n\nParámetros del método split:
\n- \n
separator— carácter delimitador (Character). \n maxSplits— número máximo de divisiones (por defectoInt.max). \n omittingEmptySubsequences— si se deben eliminar las subcadenas vacías (por defectotrue). \n
let csvLine = "1,2,,4,5"\nlet withEmpties = csvLine.split(separator: ",", omittingEmptySubsequences: false)\nprint(withEmpties) // ["1", "2", "", "4", "5"]\n\nlet withoutEmpties = csvLine.split(separator: ",", omittingEmptySubsequences: true)\nprint(withoutEmpties) // ["1", "2", "4", "5"]\n\nSi necesita dividir una cadena en un array de Substring en Swift y desea controlar los elementos vacíos, elija split. Y para obtener [String], simplemente agregue .map(String.init).
let result: [String] = "a,b,c".split(separator: ",").map(String.init)\nprint(result) // ["a", "b", "c"]\n\n