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.

Top comments (0)