Convert Int to String in Swift: Principais erros e como evitá-los
Você já se pegou pensando: «Por que em Swift é tão difícil transformar um número comum em uma string?» Spoiler: na verdade, é simples. Mas é justamente essa simplicidade que causa as armadilhas mais inesperadas para desenvolvedores (especialmente iniciantes). No Stack Overflow, a pergunta «Convert Int to String in Swift» acumula milhares de visualizações e dezenas de comentários com erros típicos.
Neste artigo, vamos analisar os 5 erros mais comuns ao converter Int para String. Você aprenderá como funciona String(describing:), os perigos da interpolação de strings no SwiftUI e por que seu código pode «falhar» no momento mais inoportuno. Não vamos apenas mostrar o código correto — vamos explicar por que ele é correto. Vamos lá!
Por que Convert Int to String não é simplesmente «pegar e fazer»?
Swift é uma linguagem fortemente tipada. O compilador não tolera liberdades, e isso é ótimo. No entanto, quando você escreve "Número: " + 42, o compilador gera um erro: Cannot convert value of type 'Int' to expected argument type 'String'. E é aí que a coisa fica interessante.
A conversão de Int para String é uma operação básica, mas esconde armadilhas: desde a escolha do método errado até problemas implícitos de desempenho. Vamos analisar cada erro com detalhes.
Erro nº1: Usar String(describing:) para Int
Muitos iniciantes, ao verem String(describing:), pensam: «Ah, um método universal! Transforma qualquer coisa em string». E é verdade, mas com uma ressalva.
let number = 42let stringValue = String(describing: number)print(stringValue) // "42"À primeira vista, funciona. Mas vamos mais fundo. String(describing:) é destinado para depuração. Ele chama o protocolo CustomStringConvertible. Para Int, isso realmente retorna o número. Mas para Optional
let optionalNumber: Int? = 42let stringValue = String(describing: optionalNumber)print(stringValue) // "Optional(42)" — provavelmente não é o que você queria!Você obterá a string "Optional(42)", e não "42". Se esse valor for para a UI — o usuário verá um texto estranho. Se for para o log — você se confundirá na análise.
Como fazer corretamente?
Use String(init:) — é um inicializador direto, criado especificamente para tipos numéricos:
let number = 42let stringValue = String(number)print(stringValue) // "42" — limpo e claro
// Para opcionais — use optional binding:let optionalNumber: Int? = 42if let number = optionalNumber { let stringValue = String(number) print(stringValue) // "42"}Erro nº2: Confiança cega na interpolação de strings
A interpolação de strings é uma ferramenta poderosa: "\\(number)". Mas muitos pensam que é a forma mais segura de conversão. E é quase verdade, mas tem um «porém».
let count = 5let message = "Você tem \\(count) novas mensagens"// "Você tem 5 novas mensagens" — ótimo!O problema surge quando você usa interpolação dentro de expressões complexas ou com opcionais:
let optionalCount: Int? = nillet message = "Você tem \\(optionalCount) novas mensagens"// "Você tem nil novas mensagens" — horrível!No Swift 5 e superior, a interpolação para opcionais ficou mais inteligente (usa StringInterpolation), mas se você trabalha com código antigo ou não atualizou o Xcode — espere surpresas.
Como evitar?
- Sempre desembrulhe opcionais antes da interpolação:
\\(count ?? 0) - Para lógica complexa, use uma variável separada
- No SwiftUI, evite