Menu
Coddy logo textTech

Folha de Consulta Swift

Última atualização

Hello World e o básico

Swift não precisa de código repetitivo no nível superior - uma única linha já roda.

OperaçãoSintaxe
Exibir uma linhaprint("Hello, World!")
Exibir sem quebra de linhaprint("Hi", terminator: "")
Interpolação de stringprint("Hi \(name)")
Comentário// this is a comment
Comentário de várias linhas/* ... */
Importar um móduloimport Foundation
Executar um arquivoswift run ou swift main.swift

Variáveis (let / var) e tipos

Use let para constantes e var para valores mutáveis; os tipos costumam ser inferidos.

OperaçãoSintaxe
Constantelet age = 30
Variávelvar count = 0
Tipo explícitolet name: String = "Ada"
Tipos básicosInt, Double, String, Bool, Character
Conversão de tipoDouble(i), String(n), Int("42")
Tuplalet pair = (1, "a")
Apelido de tipotypealias ID = Int
Verificar tipovalue is String, value as? String

Optionals

Optionals modelam a possível ausência de um valor; faça o unwrap antes de usar.

OperaçãoSintaxe
Declarar optionalvar name: String? = nil
Optional bindingif let n = name { ... }
Unwrap com guardguard let n = name else { return }
Coalescência de nillet n = name ?? "default"
Optional chaininguser?.address?.city
Force unwrap (inseguro)name!
Implicitamente desempacotadovar name: String!
Map sobre optionalname.map { $0.count }

Strings

Strings são tipos de valor com suporte completo a Unicode.

OperaçãoSintaxe
Comprimentos.count
Maiúsculas / minúsculass.uppercased(), s.lowercased()
Concatenar"foo" + "bar"
Interpolação"Total: \(price)"
Contéms.contains("ell")
Tem prefixo / sufixos.hasPrefix("he")
Dividirs.split(separator: ",")
Substituirs.replacingOccurrences(of: "a", with: "b")
String de várias linhas""" ... """

Coleções (Array, Dictionary, Set)

Três tipos centrais de coleção, todos tipos de valor.

OperaçãoSintaxe
Literal de arrayvar nums = [1, 2, 3]
Appendnums.append(4)
Acesso / contagemnums[0], nums.count
Map / filternums.map { $0 * 2 }, nums.filter { $0 > 1 }
Literal de dicionáriovar ages = ["Ada": 30]
Acesso ao dicionárioages["Ada"] retorna um optional
Literal de setvar ids: Set = [1, 2, 3]
Inserir em um setids.insert(4)
Iterar dicionáriofor (k, v) in ages { ... }

Controle de fluxo

Condições não precisam de parênteses; o switch precisa ser exaustivo.

OperaçãoSintaxe
If / elseif x > 0 { ... } else { ... }
Ternáriolet r = x > 0 ? "pos" : "neg"
Switchswitch n { case 1: ...; default: ... }
Switch com rangecase 1...5: ...
Laço for-infor i in 0..<10 { ... }
For-in sobre arrayfor item in items { ... }
Laço whilewhile x < 100 { ... }
Repeat-whilerepeat { ... } while x < 100
Break / continuebreak, continue

Funções e closures

Funções têm parâmetros rotulados; closures são blocos de código autossuficientes.

OperaçãoSintaxe
Definir uma funçãofunc add(a: Int, b: Int) -> Int { a + b }
Rótulo externofunc greet(to name: String) { ... }
Parâmetro padrãofunc greet(name: String = "World") { ... }
Parâmetro variádicofunc sum(_ nums: Int...) -> Int { ... }
Múltiplos retornos (tupla)func bounds() -> (min: Int, max: Int) { ... }
Expressão de closurelet f = { (x: Int) -> Int in x * x }
Trailing closurenums.map { $0 * 2 }
Argumentos abreviados{ $0 + $1 }

Structs vs classes

Structs são tipos de valor (copiados); classes são tipos de referência (compartilhados).

OperaçãoSintaxe
Definir uma structstruct Point { var x: Int; var y: Int }
Definir uma classeclass Person { var name: String }
Inicializador de classeinit(name: String) { self.name = name }
Criar instâncialet p = Point(x: 1, y: 2)
Método mutating de structmutating func move() { x += 1 }
Método de classefunc greet() { ... }
Herança (apenas classe)class Student: Person { ... }
Propriedade computadavar area: Int { width * height }
Membro estáticostatic let shared = Manager()

Enums

Enums agrupam valores relacionados e podem carregar dados associados.

OperaçãoSintaxe
Definir um enumenum Direction { case north, south }
Usar um caselet d = Direction.north
Switch sobre enumswitch d { case .north: ... }
Valores brutosenum Status: Int { case ok = 200 }
Acessar valor brutoStatus.ok.rawValue
Inicializar a partir do valor brutoStatus(rawValue: 200)
Valores associadoscase result(Int, String)
Métodos em enumsfunc label() -> String { ... }

A sintaxe de Swift que você mais usa, em uma única página. Esta folha de consulta Swift é uma referência rápida para o núcleo da linguagem - constantes e variáveis, optionals, strings, coleções, controle de fluxo, funções e closures, além dos structs, classes e enums com os quais você constrói apps para iOS e macOS.

Tudo aqui é Swift padrão e compila com a toolchain oficial. Copie o que precisar ou teste cada trecho ao vivo no playground de Swift - sem necessidade do Xcode.

Perguntas frequentes sobre a folha de consulta Swift

Esta folha de consulta Swift é gratuita?
Sim. Esta folha de consulta Swift é totalmente gratuita, sem necessidade de cadastro. Salve nos favoritos e volte sempre que precisar consultar um padrão de optional, a sintaxe de closure ou um método de coleção.
Como faço o unwrap de um optional em Swift?
Um optional pode conter um valor ou nil, então você faz o unwrap dele antes de usar. As formas seguras são o optional binding (if let n = name { ... }), um guard let no topo de uma função, o operador de coalescência de nil (name ?? "default") e o optional chaining (user?.name). O force unwrap com name! funciona, mas causa crash se o valor for nil, então recorra a ele apenas quando tiver certeza.
Qual é a diferença entre uma struct e uma classe em Swift?
Uma struct é um tipo de valor: atribuí-la ou passá-la cria uma cópia, então as alterações não afetam o original. Uma class é um tipo de referência: as cópias compartilham a mesma instância, e apenas classes oferecem herança. A orientação da Apple é preferir structs por padrão e usar uma classe quando você precisar de estado mutável compartilhado ou de herança.
Posso praticar Swift online?
Sim. Abra o playground de Swift para executar qualquer trecho desta folha de consulta no seu navegador - sem Xcode para instalar. Quando quiser estrutura, o curso interativo e gratuito de Swift da Coddy leva você passo a passo de optionals e coleções a structs, classes e enums.
Esta folha de consulta é boa para iniciantes?
Sim. Ela está organizada dos tópicos mais comuns (variáveis, optionals, controle de fluxo) até os avançados (closures, structs vs classes, enums), de modo que você pode usar as seções de cima já no primeiro dia e ir avançando para o resto.
Coddy programming languages illustration

Aprenda Swift com a Coddy

COMEÇAR