DEV Community

Cover image for Swift Descomplicado: Guia Completo para Leigos
Priscila Oliveira
Priscila Oliveira

Posted on

Swift Descomplicado: Guia Completo para Leigos

Vamos explicar os conceitos fundamentais da linguagem Swift sem usar terminologia complicada, com exemplos que você encontra no seu dia a dia.

O que é Swift, afinal?

Swift é a linguagem de programação criada pela Apple para desenvolver aplicativos para iPhone, iPad e Mac. Pense nela como um idioma que você usa para "conversar" com o computador e dizer a ele o que fazer.

Tipos de Dados: As Caixinhas da Programação

Quando organizamos coisas em casa, usamos diferentes tipos de recipientes: caixas para sapatos, potes para alimentos, gavetas para documentos. Na programação Swift, também temos diferentes "recipientes" para diferentes tipos de informação.

Números Inteiros (Int)

O que é: Recipiente para números sem casas decimais.

Na vida real: Como um contador de pessoas em um ônibus – só temos números inteiros (não existe meia pessoa).

// Declarando idade
let idade = 25

// Contando itens em um carrinho de compras
var itensNoCarrinho = 5
itensNoCarrinho = itensNoCarrinho + 2 // Agora temos 7 itens
Enter fullscreen mode Exit fullscreen mode

Números Decimais (Double)

O que é: Recipiente para números com casas decimais.

Na vida real: Como uma balança que mostra seu peso com precisão (72,5 kg).

// Preço de um produto
let precoCamiseta = 49.90

// Calculando o preço total com desconto
let desconto = 5.50
let precoFinal = precoCamiseta - desconto // 44.40
Enter fullscreen mode Exit fullscreen mode

Texto (String)

O que é: Recipiente para letras, palavras e textos.

Na vida real: Como uma etiqueta que você coloca nas coisas.

// Nome de um contato
let nomeAmigo = "Carlos"

// Endereço completo
let endereco = "Rua das Flores, 123 - Jardim Primavera"
Enter fullscreen mode Exit fullscreen mode

Verdadeiro ou Falso (Bool)

O que é: Recipiente que só aceita dois valores: verdadeiro ou falso.

Na vida real: Como um interruptor de luz – ou está ligado, ou está desligado.

// Verificando se a loja está aberta
let lojaAberta = true

// Verificando se tem vaga no estacionamento
let temVagaDisponivel = false

// Usando para tomar decisões
if lojaAberta {
    print("Vamos às compras!")
} else {
    print("Precisamos voltar outro dia.")
}
Enter fullscreen mode Exit fullscreen mode

Segurança de Tipos: O Fiscal da Festa

Swift tem um sistema que chamamos de "segurança de tipos" (type safety). Pense nele como um segurança na porta de uma festa VIP.

Na vida real: Se a festa é só para adultos, o segurança não deixa crianças entrarem. Da mesma forma, Swift não permite que você coloque um tipo de dado no lugar errado.

var nomePessoa = "Júlia"
// nomePessoa = 42 // ERRO! Não podemos colocar um número onde deveria ter texto
Enter fullscreen mode Exit fullscreen mode

Inferência de Tipos: O Detetive Esperto

Swift consegue "adivinhar" qual tipo de dado você está usando sem que você precise dizer explicitamente.

Na vida real: É como quando alguém traz um prato coberto para um jantar, e pelo cheiro você já sabe que é lasanha, sem precisar olhar.

// Swift entende que isso é texto
var cidade = "São Paulo" 

// Swift entende que isso é um número decimal
var temperatura = 28.5 

// Swift entende que isso é um número inteiro
var população = 12000000 
Enter fullscreen mode Exit fullscreen mode

UInt8: A Mini-Caixinha para Números Pequenos

UInt8 é um tipo especial para números inteiros entre 0 e 255.

Na vida real: É como um termômetro que só mede de 0 a 100 graus. Tem um limite, mas é perfeito para sua função específica.

let vermelho: UInt8 = 255 // Componente vermelho de uma cor RGB
let verde: UInt8 = 128    // Componente verde
let azul: UInt8 = 0       // Componente azul
Enter fullscreen mode Exit fullscreen mode

Uso prático: Nas telas digitais, as cores são formadas pela mistura de vermelho, verde e azul (RGB), cada um variando de 0 a 255. UInt8 é perfeito para representar essas cores.

Tuplas: A Sacola Organizada

Tuplas permitem agrupar diferentes valores em um único pacote.

Na vida real: Como uma marmita com divisórias, onde cada compartimento guarda um tipo de comida.

// Informações de uma pessoa
let pessoa = (nome: "Ana", idade: 29, profissão: "Arquiteta")

// Acessando informações específicas
print("Nome: \(pessoa.nome)")
print("Idade: \(pessoa.idade)")
Enter fullscreen mode Exit fullscreen mode

Uso prático: Quando você preenche um formulário com seus dados pessoais, a combinação de todas essas informações poderia ser representada como uma tupla em Swift.

Optionals: A Caixa de Presente Misteriosa

Um Optional é um conceito único do Swift. É como uma caixa que pode conter um valor ou estar vazia.

Na vida real: Como aquela vez que você pediu um presente de aniversário, mas não tinha certeza se realmente ganharia. O Optional representa essa incerteza.

// Declarando um Optional (note o símbolo '?')
var presente: String?

// Inicialmente, não sabemos se ganharemos um presente
presente = nil // 'nil' significa "nada", "vazio"

// Mais tarde, ganhamos o presente!
presente = "Relógio"
Enter fullscreen mode Exit fullscreen mode

Como abrir a caixa de presente com segurança (Optional Binding)

Para usar um Optional, precisamos verificar se ele contém alguma coisa.

Na vida real: Antes de usar um presente, você precisa verificar se realmente ganhou algo e o que é.

// Usando 'if let' para verificar e desembrulhar com segurança
if let meuPresente = presente {
    print("Oba! Ganhei um \(meuPresente)!")
} else {
    print("Não ganhei presente desta vez...")
}
Enter fullscreen mode Exit fullscreen mode

Forçando a abertura do presente (Forced Unwrapping)

Existe uma forma mais direta (e perigosa) de abrir a caixa.

Na vida real: É como rasgar o embrulho sem verificar se tem algo dentro. Se estiver vazio, você vai se decepcionar.

// CUIDADO: Só use quando tiver certeza que há um valor
let meuPresente = presente! // O símbolo '!' força a abertura
Enter fullscreen mode Exit fullscreen mode

Quando usar: Apenas quando você tem 100% de certeza que o Optional contém um valor. Por exemplo, se você acabou de verificar que ele não é nil.

Presentes que se desembrulham sozinhos (Implicitly Unwrapped Optionals)

Alguns Optionals são declarados para se desembrulharem automaticamente.

Na vida real: Como presentes em que o embrulho se desfaz sozinho quando você vai usar.

// O símbolo '!' na declaração indica desembrulho automático
var surpresa: String! = "Uma viagem!"

// Pode usar diretamente, sem desembrulhar
print("Minha surpresa é \(surpresa)")
Enter fullscreen mode Exit fullscreen mode

Quando usar: Raramente. Apenas em situações específicas onde você sabe que um valor inicialmente ausente estará definitivamente presente antes de ser usado.

Type Aliases: Apelidos para os Tipos

Type Aliases permitem dar nomes mais significativos ou mais curtos para tipos existentes.

Na vida real: Como chamar sua avó de "vovó" em vez do nome completo dela.

// Criando um apelido para um tipo complexo
typealias Contatos = [String: String]

// Agora é mais fácil de entender o que essa variável contém
var listaDeContatos: Contatos = [
    "João": "11 97777-8888",
    "Maria": "11 96666-7777"
]
Enter fullscreen mode Exit fullscreen mode

Uso prático: Em aplicativos de mensagem, você poderia usar um Type Alias para deixar claro que um dicionário representa uma lista de contatos e seus números de telefone.

Exemplos Práticos do Mundo Real

Aplicativo de Lista de Compras

// Lista de itens para comprar (String)
var listaDeCompras = ["Leite", "Pão", "Ovos", "Frutas"]

// Preço de cada item (Double)
let precoLeite = 4.50
let precoPao = 6.75
let precoOvos = 12.00
let precoFrutas = 8.30

// Quantidade de cada item (Int)
var quantidadeLeite = 2
var quantidadePao = 1
var quantidadeOvos = 1
var quantidadeFrutas = 3

// Calculando o total
let total = (precoLeite * Double(quantidadeLeite)) +
          (precoPao * Double(quantidadePao)) +
          (precoOvos * Double(quantidadeOvos)) +
          (precoFrutas * Double(quantidadeFrutas))

// Verificando se temos dinheiro suficiente (Bool)
let dinheiroDisponivel = 50.00
let temDinheiroSuficiente = dinheiroDisponivel >= total

// Usando Optional para um item que talvez queiramos comprar
var itemAdicional: String? = nil

// Decidindo comprar o item adicional
itemAdicional = "Chocolate"

// Verificando se decidimos comprar o item adicional
if let item = itemAdicional {
    print("Também vou comprar \(item)")
    listaDeCompras.append(item)
}
Enter fullscreen mode Exit fullscreen mode

Aplicativo de Perfil de Usuário

// Informações do usuário como tupla
let perfil = (
    nome: "Marta Silva",
    idade: 32,
    profissao: "Designer",
    cidade: "Rio de Janeiro"
)

// Configurações de privacidade como booleanos
let mostrarIdade = false
let perfilPublico = true
let receberNotificacoes = true

// Informações opcionais (que podem não estar preenchidas)
var telefone: String? = nil
var sitePessoal: String? = "www.martadesign.com.br"

// Exibindo o perfil respeitando a privacidade
print("Nome: \(perfil.nome)")

if mostrarIdade {
    print("Idade: \(perfil.idade)")
}

print("Profissão: \(perfil.profissao)")
print("Cidade: \(perfil.cidade)")

// Verificando informações opcionais
if let site = sitePessoal {
    print("Site: \(site)")
}

if let tel = telefone {
    print("Telefone: \(tel)")
} else {
    print("Telefone não informado")
}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Swift pode parecer complexo à primeira vista, mas seus conceitos fundamentais refletem situações que encontramos no dia a dia. A linguagem foi projetada para ser segura e impedir erros comuns, ao mesmo tempo em que oferece flexibilidade para os desenvolvedores.

Pense nos tipos de dados como diferentes recipientes, nos Optionals como caixas que podem estar vazias, e nas tuplas como marmitas compartimentadas. Com essas analogias em mente, você já deu o primeiro passo para entender programação Swift, mesmo sem experiência prévia em tecnologia!

E lembre-se: assim como você não aprendeu a andar de bicicleta apenas lendo sobre o assunto, a melhor forma de aprender Swift é praticando. Comece com exemplos simples e vá aumentando a complexidade conforme se sente mais confortável.

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay