Arrays em Swift: 5 erros fatais ao adicionar elementos (e como evitá-los)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que até mesmo o append pode quebrar o código?

\n\n

Parece simples, não é? Adicionar um elemento a um array em Swift. Escrevemos array.append(newElement) e pronto. No entanto, a julgar pelos milhares de visualizações no Stack Overflow, é justamente esta operação, aparentemente trivial, que confunde tanto iniciantes quanto desenvolvedores experientes.

\n\n

Neste artigo, não vamos apenas mostrar como adicionar um elemento a um array em Swift. Vamos analisar os 5 erros mais comuns e traiçoeiros que transformam um simples append em uma dor de cabeça. Você descobrirá por que o compilador pode reclamar de um código aparentemente correto, como não ultrapassar os limites do array e qual a diferença entre append e insert. Vamos lá!

\n\n

Erro nº 1: Esquecer a tipagem estrita

\n\n

Swift é uma linguagem de tipagem estrita. Isso significa que um array declarado como [Int] não aceitará uma string, mesmo que ela se pareça muito com um número. Esta é uma armadilha comum para quem vem do Python ou JavaScript.

\n\n

Problema: Incompatibilidade de tipos

\n\n
var numbers: [Int] = [1, 2, 3]\n// Erro de compilação: Cannot convert value of type 'String' to expected argument type 'Int'\nnumbers.append("4")\n
\n\n

Solução: Conversão de tipos

\n\n

Sempre converta explicitamente os dados para o tipo do array. Use inicializadores ou conversão explícita:

\n\n
var numbers: [Int] = [1, 2, 3]\nif let intValue = Int("4") {\n    numbers.append(intValue) // ✅ Funciona: numbers = [1, 2, 3, 4]\n}\n\n// Ou para um array de strings:\nvar strings: [String] = ["a", "b"]\nstrings.append(String(42)) // ✅ "42" adicionado como string\n
\n\n

Dica: Se você estiver adicionando elementos de uma fonte externa (API, entrada do usuário), sempre verifique o tipo com as? ou use compactMap para filtrar nil.

\n\n

Erro nº 2: Index out of range ao usar insert

\n\n

O método insert(_:at:) permite inserir um elemento em uma posição arbitrária. Mas se você especificar um índice maior que o número de elementos no array, o aplicativo irá travar com Fatal error: Index out of range.

\n\n

Problema: Inserção fora dos limites do array

\n\n
var fruits = ["Maçã", "Banana"]\n// Array de 2 elementos: índices 0 e 1\n// Erro! O índice 5 não existe\nfruits.insert("Laranja", at: 5)\n
\n\n

Solução: Verificação de limites e extensão segura

\n\n

Existem duas maneiras de evitar esse erro:

\n
    \n
  • Verificação do índice: Certifique-se de que o índice está no intervalo de 0 a array.count (inclusive para insert).
  • Complemento automático: Se você quiser inserir um elemento no final quando estiver fora dos limites, use a lógica com append.
\n\n
var fruits = ["Maçã", "Banana"]\n\n// Opção segura 1: verificação\nlet index = 5\nif index >= 0 && index <= fruits.count {\n    fruits.insert("Laranja", at: index)\n} else {\n    // Se o índice for maior que count, simplesmente adiciona ao final\n    fruits.append("Laranja")\n}\nprint(fruits) // ["Maçã", "Banana", "Laranja"]\n\n// Opção segura 2: extensão (extension)\nextension Array {\n    mutating func safeInsert(_ element: Element, at index: Int) {\n        if index >= 0 && index <= self.count {\n            self.insert(element, at: index)\n        } else {\n            self.append(element)\n        }\n    }\n}\n\nfruits.safeInsert("Kiwi", at: 100) // ✅ Adicionará ao final\n
\n\n

Erro nº 3: Confusão entre append e +=

\n\n

O operador += também pode adicionar elementos, mas seu comportamento difere do append. A principal diferença: += funciona com coleções, não com elementos individuais.

\n\n

Problema: Criação implícita de array

\n\n
var list = [1, 2, 3]\nlis                

Blogs

Book Recommendations