Um momento
Todos os artigos
Python 14 min de leitura

O Que É a Linguagem de Programação Swift? Um Guia Simples da Linguagem por Trás dos Apps de iPhone

Um guia simples e sem jargões sobre o Swift, a linguagem que a Apple criou para apps de iPhone, iPad e Mac. Entenda por que ela substituiu o Objective-C, como os opcionais evitam travamentos, como um app é feito e quão rápido o Swift é.

nbkhope
Nesta página

Quase todo app do seu iPhone, do app do banco aos jogos que você joga no ônibus, foi construído por alguém escrevendo código. Hoje em dia, a maioria dos apps novos para aparelhos da Apple é escrita em Swift, uma linguagem de programação que a Apple lançou em 2014 para deixar a criação de apps mais rápida, mais segura e mais agradável.

Este artigo explica, em linguagem simples, o que é o Swift, por que a Apple o criou, o que o torna mais seguro que a linguagem que ele substituiu e como um app em Swift vai de uma ideia até a App Store.

Antes do Swift: o Objective-C

Por cerca de 30 anos, os apps da Apple foram escritos numa linguagem chamada Objective-C, criada no começo dos anos 1980 acrescentando recursos de orientação a objetos à linguagem C (veja O Que É a Linguagem de Programação C?). A Apple a herdou em 1997, quando comprou a NeXT, a empresa que Steve Jobs fundou depois de sair da Apple.

O Objective-C moveu os primeiros apps de iPhone e a App Store, que abriu em 2008. Mas já mostrava a idade: muitos símbolos, código comprido e, por ser construído sobre o C, os mesmos erros arriscados de memória. Veja a mesma pequena tarefa nas duas linguagens:

A mesma tarefa em Objective-C e em Swift. Objective-C, dos anos 1980 e a linguagem da Apple antes do Swift: uma linha declarando um NSString nome com @"Maria", uma linha declarando um NSArray de frutas cheio de arrobas, e depois uma chamada a NSLog com marcadores %@ e %lu e uma conversão de tipo, espalhada em duas linhas. Swift, de 2014: let nome = "Maria", let frutas = uma lista com "maçã" e "banana", e print("Olá, (nome)! Você tem (frutas.count) frutas."). Mostra: Olá, Maria! Você tem 2 frutas. Sem asteriscos, sem arrobas, sem ponto e vírgula. O Swift deixa de lado os símbolos que o Objective-C herdou do C, e o ( ) encaixa um valor direto numa frase

O Swift deixa de lado os asteriscos, as arrobas e o ponto e vírgula. Escrever \(nome) dentro de uma frase encaixa um valor ali. E o Swift descobre sozinho que nome guarda um texto e frutas guarda uma lista, então você não precisa dizer.

Um projeto secreto

Em 2010, um engenheiro da Apple chamado Chris Lattner começou a projetar uma nova linguagem nas horas vagas. Lattner já era famoso entre os programadores: quando era estudante universitário, ele criou o LLVM, um kit de ferramentas para construir compiladores que hoje move muitas linguagens de programação.

O projeto paralelo dele virou uma equipe secreta dentro da Apple. Quando a Apple apresentou o Swift na sua conferência de desenvolvedores, em junho de 2014, quase todo mundo foi pego de surpresa. Um ano depois, em 2015, a Apple tornou o Swift código aberto, livre para qualquer pessoa usar e melhorar, e ele passou a rodar também no Linux.

Como é o Swift

Veja o clássico primeiro programa:

print("Olá, mundo!")

Uma linha. E aqui está um pequeno carro, descrito com uma struct (um pacote de valores com nome e habilidades):

1struct Carro {
2    var cor: String
3    var velocidade = 0
4
5    mutating func acelerar() {
6        velocidade += 10
7    }
8}
9
10var meuCarro = Carro(cor: "vermelho")
11meuCarro.acelerar()
12meuCarro.acelerar()
13print("O meu carro \(meuCarro.cor) anda a \(meuCarro.velocidade) km/h")

Isso mostra O meu carro vermelho anda a 20 km/h. O Swift usa let para valores que nunca mudam e var para valores que podem mudar, e incentiva usar let sempre que possível, para que menos coisas mudem sem querer.

Separar os adultos de uma lista de pessoas parece quase uma frase:

1let adultos = pessoas
2    .filter { $0.idade >= 18 }
3    .map { $0.nome }
4    .sorted()
5
6print(adultos.joined(separator: ", "))  // Maria, Pedro

Filter (filtrar) as pessoas com 18 anos ou mais, map (transformar) cada uma no seu nome, sorted (ordenar) os nomes. (O $0 é o atalho do Swift para "o item atual".)

Opcionais: a resposta do Swift ao travamento da "caixa vazia"

Um dos motivos mais comuns de travamento de apps é tentar usar um valor que não existe: um apelido que nunca foi definido, uma foto que não baixou, um usuário que não fez login. Muitas linguagens representam o "nada" com um valor vazio especial, muitas vezes chamado de null ou nil, e usá-lo sem querer derruba o programa. O inventor dele, Tony Hoare, mais tarde o chamou de seu "erro de um bilhão de dólares".

O Swift enfrenta isso com os opcionais. Um valor que pode estar faltando ganha um ? no tipo, como uma caixa que pode estar vazia:

Opcionais: uma caixa que pode estar vazia. Buscar o apelido da Maria dá uma caixa com o valor "Mari". Buscar o apelido da Ana dá uma caixa vazia, nil. Os dois têm o tipo String?, em que o ponto de interrogação quer dizer "talvez". O Swift obriga você a conferir antes de usar, por exemplo com if let, ou com o operador ?? e um valor reserva como "amigo", que é usado quando a caixa está vazia. Esqueça de conferir, e o compilador barra você, com a mensagem real do Swift 6: error, value of optional type String? must be unwrapped to a value of type String, ou seja, o valor opcional precisa ser aberto antes de virar um texto. Em muitas linguagens mais antigas, usar um valor vazio assim derruba o app enquanto alguém o usa. O Swift pega o erro enquanto o programador ainda está escrevendo o código

O Swift não deixa você usar o que está dentro da caixa até conferir se ela está vazia. Você pode abri-la com cuidado usando if let, ou dar um valor reserva com ??:

1let apelidos = ["Maria": "Mari", "Pedro": "Pepe"]
2
3if let apelido = apelidos["Ana"] {
4    print("Oi, \(apelido)!")
5} else {
6    print("A Ana ainda não tem apelido.")
7}
8
9let saudacao = apelidos["Maria"] ?? "amigo"
10print("Oi, \(saudacao)!")

Isso mostra A Ana ainda não tem apelido. e depois Oi, Mari!. Se você esquecer de conferir, o programa nem chega a ser criado: o compilador (a ferramenta que transforma código num app) aponta a linha e explica o que está errado. O erro é pego no computador do programador, não no seu.

Mais redes de proteção

O Swift também confere outros erros clássicos. Neste teste, os dois programas guardam 127 numa pequena "caixa" de número que só cabe até 127, e depois somam 1:

Um número a mais: C vs. Swift. Os dois programas guardam 127 numa caixinha de número que só cabe até 127, e depois somam 1. O programa em C mostra -128: ele continua com um número errado. O programa em Swift para com "Program crashed: Illegal instruction", o programa travou de propósito: ele para em vez de usar um número errado. Saída real. No C, o número "dá a volta" em silêncio para -128, como o hodômetro de um carro antigo que zera. O Swift confere cada soma e para o programa, então um estoque, um saldo ou uma pontuação nunca viram bobagem sem ninguém perceber

O C "dá a volta" em silêncio para -128, como o hodômetro de um carro antigo que zera, e continua com um número errado. O Swift para o programa. Parar parece ruim, mas é muito mais seguro do que um app mostrar, sem ninguém perceber, um estoque negativo ou um saldo errado. O Swift também confere se você nunca lê além do fim de uma lista, e cuida da memória automaticamente, evitando os erros perigosos de memória comuns no C e no Objective-C. (Para outra linguagem construída em torno da segurança, veja O Que É a Linguagem de Programação Rust?)

Como um app é feito

Como um app de iPhone é feito com Swift. Xcode: o app gratuito da Apple para escrever Swift no Mac. Swift e SwiftUI: código para a lógica e para as telas. Simulador: teste o app num iPhone virtual. App Store: a Apple revisa o app e o publica. Seus aparelhos: iPhone, iPad, Mac, Watch, TV e Vision Pro. O mesmo código Swift, com pequenos ajustes, roda em todo tipo de aparelho da Apple. Há mais de 2 bilhões deles em uso no mundo
  1. Xcode: os desenvolvedores escrevem Swift no Xcode, o app gratuito da Apple para Mac.
  2. SwiftUI: desde 2019, as telas de muitos apps são feitas com o SwiftUI, em que você descreve o que a tela deve mostrar e o SwiftUI a mantém atualizada.
  3. Simulador: o Xcode consegue mostrar o app num iPhone virtual direto no Mac, para testar sem precisar de um celular.
  4. App Store: quando o app fica pronto, o desenvolvedor o envia para a Apple (publicar exige uma assinatura paga de desenvolvedor da Apple), a Apple o revisa e ele aparece na App Store.

Veja uma telinha em SwiftUI com um botão de "Curtir" que conta os toques:

1import SwiftUI
2
3struct TelaCurtir: View {
4    @State private var curtidas = 0
5
6    var body: some View {
7        VStack {
8            Text("\(curtidas) curtidas")
9            Button("👍 Curtir") {
10                curtidas += 1
11            }
12        }
13    }
14}

O @State avisa ao SwiftUI que curtidas pode mudar, e cada vez que muda, o SwiftUI redesenha o texto automaticamente. Não existe código dizendo "encontre o texto e atualize": você descreve a tela, e o SwiftUI cuida do resto.

O Swift é rápido?

Sim, quando é compilado na versão final. O Swift compila para código de máquina, como o C. Cronometramos a mesma tarefa, contar os números primos abaixo de 2 milhões, dentro do contêiner oficial do Swift para Linux:

Teste de velocidade: o Swift roda tão rápido quanto o C na versão final. Contando os números primos abaixo de 2 milhões, do início ao fim, medido para este artigo dentro do contêiner Linux oficial do Swift como a mediana de 5 execuções num notebook. Swift, versão final: 0,25 segundo. C, compilado com clang -O2: 0,26 segundo. Swift, versão de teste: 4,92 segundos. Python 3.12: 17,76 segundos, fora do gráfico. Versões: Swift 6.0, clang 17 e Python 3.12. A versão de teste ("debug") pula as otimizações para que os programadores possam inspecionar o código enquanto testam. Os apps que você baixa são sempre a versão final ("release")

A versão final do Swift empatou com o C, em cerca de um quarto de segundo, umas 70 vezes mais rápido que o Python. Também cronometramos uma versão de teste (debug), a que os programadores usam enquanto testam, que pula as otimizações para o código ficar mais fácil de inspecionar. Ela levou quase 5 segundos, um bom lembrete de quanto trabalho as otimizações do compilador fazem. Os apps que você baixa são sempre a versão final.

Onde o Swift roda

Onde o Swift roda. iPhone e iPad: a maioria dos apps novos de iOS, incluindo os da Apple. Mac: programas para o macOS. Watch, TV e Vision Pro: apps para os outros aparelhos da Apple. Servidores: bastidores de sites no Linux, com ferramentas como o Vapor. Windows: o navegador Arc para Windows é feito com Swift. Aprendizado: o Swift Playgrounds ensina crianças a programar no iPad e no Mac. O Swift é mais conhecido pelos apps da Apple, mas desde 2015 ele tem código aberto e também roda no Linux e no Windows
  • Aparelhos da Apple: iPhone, iPad, Mac, Apple Watch, Apple TV e Apple Vision Pro. A Apple usa Swift nos próprios apps, e ele é a linguagem recomendada para os apps novos.
  • Servidores: como o Swift tem código aberto e roda no Linux, ele também pode mover os bastidores de sites, com frameworks como o Vapor.
  • Windows: o navegador Arc para Windows foi construído com Swift, mostrando que ele funciona também fora do mundo da Apple.
  • Aprendizado: o app gratuito Swift Playgrounds, da Apple, lançado em 2016, ensina crianças e iniciantes a programar com quebra-cabeças e jogos no iPad e no Mac.

E o Android? Os apps de Android normalmente são escritos em outra linguagem, o Kotlin, que tem um papel parecido no mundo do Google. Muitas empresas mantêm duas equipes: uma escrevendo Swift para iPhone e outra escrevendo Kotlin para Android.

As desvantagens

  • Ligado à Apple. O Swift roda em outros lugares, mas os seus maiores trunfos, o SwiftUI e as bibliotecas de apps, são exclusivos da Apple. Criar apps de iPhone exige um Mac.
  • Muda rápido. O Swift evoluiu depressa, e as primeiras versões quebravam código antigo a cada atualização. Hoje ele é bem mais estável, mas alguns tutoriais na internet estão desatualizados.
  • Tempo de compilação. Projetos grandes em Swift podem demorar para compilar, em parte porque o compilador se esforça para descobrir os tipos sozinho.
  • Mundo menor fora da Apple. Para servidores, ciência de dados ou IA, outras linguagens têm muito mais ferramentas e bibliotecas prontas.

Uma breve história

Uma breve história do Swift, numa linha do tempo. 1984: nasce o Objective-C. 1997: a Apple compra a NeXT e as suas ferramentas de Objective-C. 2008: a App Store é aberta. 2010: Chris Lattner começa o Swift em segredo. 2014: a Apple apresenta o Swift. 2015: o Swift vira código aberto e roda no Linux. 2016: Swift Playgrounds para iPad. 2019: chega o SwiftUI. 2024: o Swift 6 pega conflitos de dados

Um marco recente: o Swift 6, lançado em 2024, consegue detectar conflitos de dados (data races), um tipo traiçoeiro de erro em que duas partes de um app mudam o mesmo dado ao mesmo tempo, e avisar sobre eles antes mesmo de o app rodar.

Vale a pena aprender Swift?

  • Ótimos motivos: você quer criar apps para iPhone, iPad, Mac ou Apple Watch. O Swift é o caminho mais direto, e é uma linguagem moderna e legível que ensina bons hábitos.
  • Bom saber: o Swift e o Xcode são gratuitos, mas o Xcode só roda no Mac. Sem um Mac, você ainda pode experimentar o Swift no Windows ou no Linux, ou no navegador com um playground on-line de Swift. O app gratuito Swift Playgrounds, da Apple, no iPad e no Mac, é um lugar divertido para começar.

Um pequeno glossário

  • Swift: a linguagem de programação da Apple para os seus aparelhos, lançada em 2014 e com código aberto desde 2015.
  • Objective-C: a linguagem que a Apple usava antes do Swift, construída sobre o C.
  • Xcode: o app gratuito da Apple para escrever, testar e publicar apps, disponível no Mac.
  • SwiftUI: o jeito da Apple de construir as telas dos apps descrevendo o que elas devem mostrar.
  • Struct: um pacote de valores com nome, como a cor e a velocidade de um carro, com habilidades.
  • let / var: as palavras do Swift para valores que nunca mudam e valores que podem mudar.
  • Opcional: um valor que pode estar faltando, marcado com ?, que precisa ser conferido antes de usar.
  • nil: a palavra do Swift para "nenhum valor", uma caixa vazia.
  • ARC: contagem automática de referências, o jeito como o Swift libera memória sem coletor de lixo.
  • Versão final / versão de teste: a versão otimizada do app que os usuários recebem (release) e a versão mais lenta que os programadores usam enquanto testam (debug).
  • Conflito de dados (data race): um erro em que duas partes de um programa mudam o mesmo dado ao mesmo tempo.

Conclusão

O Swift começou como o projeto paralelo de um engenheiro e virou a linguagem por trás da maioria dos apps novos para mais de 2 bilhões de aparelhos da Apple. Ele trocou os símbolos do Objective-C por um código limpo e legível, e acrescentou redes de proteção, como os opcionais e a checagem de números que estouram, que pegam erros comuns de travamento antes de o app chegar às mãos de alguém.

Ele está no seu melhor no mundo da Apple, e você vai precisar de um Mac para criar apps de iPhone. Mas se você já se perguntou o que existe por trás dos apps do seu celular, há uma boa chance de a resposta ser uma linguagem com nome de um pássaro pequeno e muito veloz.

Obrigado pela leitura!

Conhece alguém que vai gostar? Mande para essa pessoa.

Mais artigos

Read next

Comentários

Be kind and specific. Comments with links from new accounts appear after a moderator reviews them.