Como converter Swift Array em String? Tutorial completo com exemplos
\n\nOlá, futuro desenvolvedor iOS! Se você já se perguntou "How do I convert a Swift Array to a String?" — você não está sozinho. Esta pergunta acumulou milhares de visualizações no Stack Overflow, e hoje vamos resolvê-la de uma vez por todas. Por que isso é necessário? Imagine: você está coletando dados de um formulário, registrando erros ou preparando texto para enviar ao servidor. Em todos esses casos, o array precisa ser transformado em uma string legível. Vamos lá!
\n\nA maneira mais simples: o método joined()
\n\nEm Swift, para unir um array de strings em uma única string, usa-se o método joined(). Este é o caminho mais curto do array para a string. Veja o exemplo básico:
let fruits = ["Maçã", "Banana", "Laranja"]\nlet fruitsString = fruits.joined()\nprint(fruitsString) // Saída: "MaçãBananaLaranja"\n\nNo entanto, o resultado parece grudado. Para tornar a string legível, use joined(separator:) — ele adiciona um separador entre os elementos:
let fruits = ["Maçã", "Banana", "Laranja"]\nlet fruitsString = fruits.joined(separator: ", ")\nprint(fruitsString) // Saída: "Maçã, Banana, Laranja"\n\nImportante: joined() funciona apenas com arrays que contêm strings ([String]). Se você tiver um array de números ou outros tipos, primeiro é necessário converter cada elemento.
Método universal: map() + joined()
\n\nO que fazer se você tiver um array de números inteiros ([Int]), números decimais ([Double]) ou, digamos, estruturas personalizadas? O map() vem ao resgate. Este método transforma cada elemento de acordo com uma regra definida e, em seguida, unimos o resultado:
let numbers = [1, 2, 3, 4, 5]\nlet numbersString = numbers.map { String($0) }.joined(separator: ", ")\nprint(numbersString) // Saída: "1, 2, 3, 4, 5"\n\nAqui, map { String($0) } transforma cada número em uma string. Depois disso, o array de strings é facilmente unido através de joined().
Exemplo com objetos complexos
\n\nSuponha que você tenha um array de usuários e precise obter uma string com seus nomes:
\n\nstruct User {\n let name: String\n let age: Int\n}\n\nlet users: [User] = [\n User(name: "Ana", age: 25),\n User(name: "Bruno", age: 30),\n User(name: "Vitória", age: 28)\n]\n\nlet namesString = users.map { $0.name }.joined(separator: ", ")\nprint(namesString) // Saída: "Ana, Bruno, Vitória"\n\nMétodo avançado: reduce(into:)
\n\nO método reduce(into:) é uma ferramenta mais flexível. Ele permite montar uma string com controle total sobre o processo. Por exemplo, você pode adicionar um prefixo, sufixo ou numerar os elementos:
let colors = ["Vermelho", "Verde", "Azul"]\nlet result = colors.reduce(into: "Minhas cores: ") { (partialResult, color) in\n partialResult += color + ", "\n}\n// Removendo a última ", " se necessário\nlet finalString = String(result.dropLast(2))\nprint(finalString) // Saída: "Minhas cores: Vermelho, Verde, Azul"\n\nObserve: removemos manualmente os dois últimos caracteres (vírgula e espaço). Isso torna o código menos elegante do que joined(), mas reduce é indispensável quando é necessária uma lógica de montagem complexa.
Tratamento de valores opcionais (Optionals)
\n\nEm projetos reais, arrays frequentemente contêm nil. Se você simplesmente chamar joined(), o compilador emitirá um erro. A solução é filtrar os nil usando compactMap():
let optionalStrings: [String?] = ["Olá", nil, "Mundo", nil, "Swift"]\nlet safeString = optionalStrings.compactMap { $0 }.joined(separator: " ")\nprint(safeString) // Saída: "Olá Mundo Swift"\n\ncompactMap { $0 } descarta automaticamente todos os nil e retorna