Swift: Tutorial de Arrays do Swift

Um array é como uma lista de compras — cada item a fazer listado em ordem. Esta lição aborda o conjunto completo de operações de array do Swift, da criação ao CRUD, tudo em um só lugar.

1. O Que Você Vai Aprender


2. Uma História Real de um Desenvolvedor de E-Commerce

(1) Problema: Gerenciamento da lista do carrinho de compras em caos, dados dessincronizados

Alice está construindo o recurso de carrinho de compras para um app de e-commerce. O usuário — Charlie — adiciona 5 itens, depois remove 2 e altera quantidades 3 vezes. No checkout, ela descobre: o total do carrinho não corresponde aos preços individuais dos itens!

SWIFT
// Alice's original "manual" approach
var cartItem1 = "Laptop"
var cartItem2 = "Mouse"
var cartItemPrice1 = 999.0
var cartItemPrice2 = 25.0
// By the time items piled up, she was lost...

Alice estava gerenciando 6 itens com 12 variáveis separadas. Quando adicionou o 7º item, já não sabia mais como nomear a variável. Dados do carrinho espalhados por mais de 20 variáveis — mude uma e esqueça a outra.

(2) A Solução com Array

SWIFT
var cartItems = ["Laptop", "Mouse", "Keyboard"]
var cartPrices = [999.0, 25.0, 89.0]
cartItems.append("Monitor")
cartPrices.append(349.0)
cartItems.remove(at: 1)
cartPrices.remove(at: 1)
print("Cart: \(cartItems)")
print("Total: $\(cartPrices.reduce(0, +))")

(3) Resultado: Dados estruturados, 90% menos bugs

Métrica Variáveis Espalhadas Gerenciamento com Array
Quantidade de variáveis 18 2
Adicionar um item Criar 3 novas variáveis 1 linha de append
Consistência dos dados Frequentemente dessincronizado Sincronia garantida
Bugs por semana 3-5 0-1

3. Criando Arrays e Propriedades Básicas

Um array é uma coleção ordenada de elementos — todos devem ser do mesmo tipo.

100%
graph TB
    A[Array] --> B[Índice 0]
    A --> C[Índice 1]
    A --> D[Índice 2]
    A --> E[Índice ...]
    B --> F[Elemento]
    C --> F
    D --> F
    E --> F
Método de Criação Exemplo Observações
Literal [1, 2, 3] Mais comum
Anotação de tipo Int Array vazio
Valor repetido Array(repeating: 0, count: 5) Todos zeros
A partir de intervalo Array(1...5) A partir de um intervalo

(1) Criando Arrays

SWIFT
// Method 1: literal
let numbers = [1, 2, 3, 4, 5]
// Method 2: empty array
var emptyArray: [String] = []
// Method 3: repeated value
let zeros = Array(repeating: 0, count: 3)
print(zeros)
// Method 4: from range
let rangeArray = Array(10...15)
print(rangeArray)

(2) Propriedades Comuns

SWIFT
let items = ["Apple", "Banana", "Orange"]
print("Count: \(items.count)")
print("Is empty: \(items.isEmpty)")
print("First: \(items.first ?? "None")")
print("Last: \(items.last ?? "None")")
print("Contains Apple: \(items.contains("Apple"))")

▶ Exemplo: Verificação de Estoque do Depósito

SWIFT
// ============================================
// Managing warehouse inventory with arrays
// ============================================
var inventory: [String] = []
if inventory.isEmpty {
    print("Warehouse is empty, adding stock...")
}
inventory.append("Laptop")
inventory.append("Mouse")
inventory.append("Keyboard")
inventory.append("Monitor")
print("Inventory has \(inventory.count) items")
print("Products: \(inventory.joined(separator: ", "))")
print("First item: \(inventory[0])")
print("Last item: \(inventory[inventory.count - 1])")

Saída:

TEXT 📖 Somente leitura
Warehouse is empty, adding stock...
Inventory has 4 items
Products: Laptop, Mouse, Keyboard, Monitor
First item: Laptop
Last item: Monitor

4. Operações CRUD com Arrays

Arrays são coleções mutáveis — você pode adicionar e remover elementos em qualquer posição.

Operação Método Exemplo
Adicionar ao final append(_:) array.append(4)
Inserir na posição insert(_:at:) array.insert(0, at: 0)
Remover na posição remove(at:) array.remove(at: 2)
Remover último removeLast() array.removeLast()
Remover todos removeAll() array.removeAll()
Modificar elemento Atribuição por subscrito array[1] = 100

(1) Adicionando e Inserindo Elementos

SWIFT
var tasks = ["Buy groceries", "Pay bills"]
// Append to end
tasks.append("Call doctor")
// Insert at specific position
tasks.insert("Check email", at: 0)
print(tasks)

(2) Removendo e Modificando Elementos

SWIFT
var scores = [88, 92, 75, 60, 95]
// Modify
scores[1] = 98
// Remove
let removed = scores.remove(at: 3)
print("Removed: \(removed)")
scores.removeLast()
scores.sort()
print(scores)

▶ Exemplo: Gerenciador de Lista de Tarefas

SWIFT
// ============================================
// Simple to-do list with arrays
// ============================================
var todoList = ["Buy milk", "Walk dog", "Write report"]
// Add
todoList.append("Read book")
todoList.insert("Morning exercise", at: 0)
// Modify
todoList[2] = "Write weekly report"
// Remove
let completed = todoList.remove(at: 1)
print("Completed: \(completed)")
// Traverse
print("\n=== Today's Todo ===")
for (i, task) in todoList.enumerated() {
    print("\(i + 1). \(task)")
}
print("\nRemaining tasks: \(todoList.count)")

Saída:

TEXT 📖 Somente leitura
Concluída: Passear com o cachorro

=== Tarefas de Hoje ===
1. Exercício matinal
2. Comprar leite
3. Escrever relatório semanal
4. Ler livro

Tarefas restantes: 4

5. Percorrimento de Array e Operações em Lote

O Swift fornece várias maneiras de percorrer arrays e métodos práticos de operação em lote.

Método de Percorrimento Sintaxe Caso de Uso
Básico for item in array Só se importa com os elementos
Indexado for (i, item) in array.enumerated() Precisa dos números dos índices
Filtrado for item in array where condicao Apenas elementos correspondentes
Ordem superior array.map { } Transformar cada elemento
Filtro array.filter { } Manter elementos que correspondem

(1) Percorrimento Básico e Filtrado

SWIFT
let numbers = [3, 7, 2, 8, 5, 1, 9, 4, 6]
// Basic for-in
for num in numbers {
    print(num, terminator: " ")
}
print()
// where filter
for num in numbers where num > 5 {
    print("\(num) is greater than 5")
}

(2) Funções de Ordem Superior: map e filter

SWIFT
let prices = [12.99, 24.50, 8.75, 35.00]
// map: add tax to each price
let withTax = prices.map { $0 * 1.08 }
print("With tax: \(withTax)")
// filter: items over 20
let expensive = prices.filter { $0 > 20 }
print("Expensive: \(expensive)")

▶ Exemplo: Análise de Dados de Pedidos

SWIFT
// ============================================
// Analyzing order data with array operations
// ============================================
let orderAmounts = [45.0, 120.0, 33.5, 299.0, 55.0, 180.0, 22.0]
// 1. Total sales
let total = orderAmounts.reduce(0, +)
print("Total sales: $\(total)")
// 2. High-value orders (>= 100)
let highValue = orderAmounts.filter { $0 >= 100 }
print("High-value orders: \(highValue.count)")
// 3. Add 10% service fee to all orders
let withServiceFee = orderAmounts.map { $0 * 1.1 }
print("First 3 with fee: \(Array(withServiceFee.prefix(3)))")
// 4. Sort
let sorted = orderAmounts.sorted(by: >)
print("Top 3: \(Array(sorted.prefix(3)))")

Saída:

TEXT 📖 Somente leitura
Total sales: $754.5
High-value orders: 3
First 3 with fee: [49.5, 132.0, 36.85]
Top 3: [299.0, 180.0, 120.0]

6. Exemplo Completo: Sistema de Gerenciamento de Carrinho de Compras

SWIFT
// ============================================
// Shopping cart management system
// Combining array CRUD, traversal, and higher-order functions
// ============================================
import Foundation
var cartItems: [String] = []
var cartPrices: [Double] = []
func addItem(name: String, price: Double) {
    cartItems.append(name)
    cartPrices.append(price)
    print("Added: \(name) - $\(price)")
}
func removeItem(at index: Int) {
    guard index >= 0 && index < cartItems.count else {
        print("Invalid index")
        return
    }
    let removed = cartItems.remove(at: index)
    cartPrices.remove(at: index)
    print("Removed: \(removed)")
}
func updateQuantity(name: String, newPrice: Double) {
    if let index = cartItems.firstIndex(of: name) {
        cartPrices[index] = newPrice
        print("Updated: \(name) -> $\(newPrice)")
    }
}
func checkout() {
    guard !cartItems.isEmpty else {
        print("Cart is empty")
        return
    }
    print("\n=== Shopping Cart ===")
    var total = 0.0
    for (i, item) in cartItems.enumerated() {
        let price = cartPrices[i]
        total += price
        print("\(i + 1). \(item) - $\(String(format: "%.2f", price))")
    }
    let tax = total * 0.08
    let grandTotal = total + tax
    print("---")
    print("Subtotal: $\(String(format: "%.2f", total))")
    print("Tax (8%): $\(String(format: "%.2f", tax))")
    print("Total: $\(String(format: "%.2f", grandTotal))")
    let expensiveItems = cartPrices.enumerated().filter { $0.element > 100 }
    if !expensiveItems.isEmpty {
        print("\nHigh-value items:")
        for (i, _) in expensiveItems {
            print("  - \(cartItems[i])")
        }
    }
}
addItem(name: "Laptop", price: 999.0)
addItem(name: "Mouse", price: 25.0)
addItem(name: "Keyboard", price: 89.0)
addItem(name: "Monitor", price: 349.0)
addItem(name: "USB Hub", price: 35.0)
removeItem(at: 4)
updateQuantity(name: "Mouse", newPrice: 22.5)
checkout()

Saída:

TEXT 📖 Somente leitura
Adicionado: Notebook - R$999.0
Adicionado: Mouse - R$25.0
Adicionado: Teclado - R$89.0
Adicionado: Monitor - R$349.0
Adicionado: Hub USB - R$35.0
Removido: Hub USB
Atualizado: Mouse -> R$22.5

=== Carrinho de Compras ===
1. Notebook - R$999.00
2. Mouse - R$22.50
3. Teclado - R$89.00
4. Monitor - R$349.00
---
Subtotal: R$1459.50
Imposto (8%): R$116.76
Total: R$1576.26

Itens de alto valor:
  - Notebook
  - Monitor

❓ Perguntas Frequentes

P: O que acontece com um acesso ao array fora dos limites? R: O programa trava (erro em tempo de execução). Sempre garanta que índice < array.count antes do acesso por subscrito, ou verifique com indices.contains(indice). P: Qual é a diferença de desempenho entre append e insert? R: append é O(1) (adiciona ao final). insert é O(n) (precisa deslocar os elementos subsequentes). Para inserções frequentes no início, considere outras estruturas de dados (ex.: listas ligadas). P: Array é um tipo por valor ou tipo por referência? R: Array é um tipo por valor (struct). Atribuir a uma nova variável cria uma cópia; modificar a cópia não afeta o array original. P: Como mesclar dois arrays? R: Use o operador +: let combinado = array1 + array2. Ou use append(contentsOf:) para adicionar todos os elementos de outro array. P: removeAll libera memória? R: removeAll() limpa os elementos, mas mantém a capacidade. Para também liberar memória, use removeAll(keepingCapacity: false).


📖 Resumo


📝 Exercícios

  1. Iniciante: Crie um array com 5 nomes de cidades. Use for-in para imprimir "Eu amo [nome da cidade]" para cada uma, uma linha cada.
  2. Intermediário: Escreva um sistema de gerenciamento de notas de alunos: inicialize um array de notas [78, 92, 55, 88, 73], implemente a adição de novas notas, remoção de notas baixas (<60), cálculo da média e localização da nota mais alta.
  3. Desafio: Implemente um recurso simples de "recomendação de carrinho". Dado um array de carrinho ["Notebook", "Mouse", "Teclado"] e uma tabela de regras de recomendação (Notebook → Mochila para Notebook, Mouse → Mousepad, Teclado → Apoio de Pulso), gere automaticamente itens recomendados e adicione-os ao carrinho. Não adicione itens já presentes.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%