/swift-lang

This repository is your complete guide to learning the fundamentals of Swift programming.

Primary LanguageSwiftMIT LicenseMIT

Linguagem de programação Swift

Linguagem de programação Swift

natorsc - swift stars - swift forks - swift License MIT

✨ Sobre este projeto

Este repositório é o seu guia completo para aprender os fundamentos da programação Swift. Seja você um desenvolvedor iniciante ou experiente, encontrará tutoriais práticos, dicas e exemplos reais de código para fortalecer suas habilidades e levar seus projetos para o próximo nível.

Se este conteúdo o ajudou, considere fazer uma doação. Seu apoio faz uma diferença real e ajuda o projeto a crescer! 💙

🛠 Tecnologias utilizadas

Swift

👨‍💻 Autor

Criado com 💙 por Renato Cruz. Tem alguma dúvida ou comentário? Entre em contato a qualquer momento!

Email

O que estou ouvindo enquanto programo ou estudo 😎🎵:

Spotify

💝 Apoie este projeto

Sua doação mantém este projeto vivo e me ajuda a continuar criando e compartilhando conteúdo útil.

GitHub Sponsors

https://github.com/sponsors/natorsc/

Pix (Brazil)

b1839493-2afe-484d-9272-82a3e402b36f


📑 Tutoriais

💡 Extra

LSP

GUIs

Web framework

HTTP server

Package manager

Package index

Visual Studio Code

Swift SDK Bundles

Additional components for cross-compilation.

Change the version according to your needs.

Linux

swift sdk install \
https://download.swift.org/swift-6.2-release/static-sdk/swift-6.2-RELEASE/swift-6.2-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz \
--checksum d2225840e592389ca517bbf71652f7003dbf45ac35d1e57d98b9250368769378

WebAssembly

swift sdk install \
https://download.swift.org/swift-6.2-release/wasm/swift-6.2-RELEASE/swift-6.2-RELEASE_wasm.artifactbundle.tar.gz \
--checksum fe4e8648309fce86ea522e9e0d1dc48e82df6ba6e5743dbf0c53db8429fb5224

Versões da linguagem de programação Swift

Data Swift Xcode
Dev 6.3 nil
15/09/2025 6.2 26
31/03/2025 6.1 16.3
16/09/2024 6.0 16.0
05/03/2024 5.10 15.3
08/01/2024 5.9.2 15.2
11/12/2023 5.9.2 15.1
18/09/2023 5.9 15.0
01/06/2023 5.8.1 14.3.1
30/03/2023 5.8 14.3
13/12/2022 5.7.2 14.2
01/11/2022 5.7.1 14.1
12/09/2022 5.7 14.0
16/05/2022 5.6.1 13.4
14/03/2022 5.6 13.3
13/12/2021 5.5.2 13.2
25/10/2021 5.5.1 13.1
20/09/2021 5.5 13.0
21/06/2021 5.4.2 12.5.1
26/04/2021 5.4 12.5
26/01/2021 5.3.2 12.4
14/12/2020 5.3.2 12.3
12/11/2020 5.3.1 12.2
16/09/2020 5.3 12.0
20/05/2020 5.2.4 11.5
15/04/2020 5.2.2 11.4.1
24/03/2020 5.2 11.4
13/12/2019 5.1.3 11.3
07/11/2019 5.1.2 11.2
20/09/2019 5.1 11.0
18/04/2019 5.0.1 10.2.1
25/03/2019 5.0 10.2
30/10/2018 4.2.1 10.1
17/09/2018 4.2 10.0
31/05/2018 4.1.2 9.4
29/03/2018 4.1 9.3
05/12/2017 4.0.3 9.2
01/11/2017 4.0.2 9.1
19/09/2017 4.0 9.0
27/03/2017 3.1 8.3
13/12/2016 3.0.2 8.2
28/10/2016 3.0.1 8.1
13/09/2016 3.0 8.0
21/03/2016 2.2 7.3
20/10/2015 2.1 7.1
21/09/2015 2.0 7.0
08/04/2015 1.2 6.3
22/10/2014 1.1 6.1
09/09/2014 1.0 6.0.1

Principais comandos

swift build  # Compilar pacotes Swift.
swift package init  # Inicia um projeto simples (vazio).
swift package init --type=executable  # Inicia um pacote com um executável.
swift package init --type=tool  # Inicia um pacote com um executável com Swift Argument Parser.
swift package init --type=library # Inicia um pacote com uma biblioteca.
swift package add-dependency  # Adicionar uma dependência ao projeto/pacote.
swift file.swift  # Executa um programa/pacote/script.
swift test  # Executa os testes do projeto.
swift repl  # Executa o modo interativo da linguagem de programação swift.
swift --version  # Exibe a versão da linguagem de programação.
swift --help  # Exibe a ajuda.
swift help <subcommand>  # Exibe a ajudar para o subcomando.

Variáveis

Para criar variáveis a linguagem de programação Swift utiliza as seguintes palavras reservadas:

  • var: Variáveis que podem ser modificadas.
  • let: Variáveis imutáveis (contantes).

Anotação de tipo

Na linguagem de programação Swift a anotação de tipo não é obrigatória:

// Com anotação de tipo.
var name: String = "Renato"

// Sem anotação de tipo.
var surname = "Cruz"

Ambas as variáveis funcionam da mesma forma.

Tipos de variáveis.

Int

Representa números inteiros.

var a = 10

Double

Representa números de ponto flutuante com precisão dupla.

var a = 10.0000

Float

Representa números de ponto flutuante com precisão simples.

var a = 10.00

Bool

Representa valores booleanos (true ou false).

var a = true

String

Representa sequências de caracteres.

var a = "Olá, mundo!"

Character

Representa um único caractere.

var a = "R"

Array

Representa uma coleção de valores do mesmo tipo.

var a = ["a", "e", "i", "o", "u"]

Dictionary

Representa uma coleção de pares (chave-valor).

var a = [
  "Key1": "Value1",
  "Key2": "Value2"
]

Set

Representa uma coleção de valores únicos.

var a = [
  "The Dream",
  "The Starry Night",
  "The False Mirror"
]

tuplas

As tuplas permitem agrupar valores de diferentes tipos em uma única variável.

let person = ("Renato", 32)
print(person.0) // "Renato"
print(person.1) // 32

nil

Os tipos opcionais indicam que uma variável pode conter um valor ou ser nula (nil).

var age: Int? = nil
if let age = age {
    print("A idade é \(age)")
} else {
    print("Idade não informada")
}

Exibir o tipo de uma variável

print(type(of: nome-da-variável))

Classes e structs

Em Swift, tanto struct quanto class permitem criar tipos personalizados que agrupam propriedades e métodos.

Mas existem diferenças fundamentais entre elas, que impactam na forma como seu código funciona.

Principais diferenças entre struct e class

  1. Tipo de valor vs tipo de referência
  • Struct é um Value Type: quando você passa uma struct para uma função ou a atribui a outra variável, ela é copiada.
  • Class é um Reference Type: quando você passa uma instância de classe, você está passando uma referência para o mesmo objeto na memória.
struct PersonStruct {
    var name: String
}

class PersonClass {
    var name: String
}

var person1 = PersonStruct(name: "Renato")
var person2 = person1
person2.name = "Maria"

print(person1.name) // "Renato" (cópia independente).
print(person2.name) // "Maria"

var person3 = PersonClass(name: "Renato")
var person4 = person3
person4.name = "Maria"

print(person3.name) // "Maria" (ambos apontam para o mesmo objeto).
print(person4.name) // "Maria"
  1. Herança
  • Struct ❌ não suporta herança.
  • Class ✅ suporta herança.
class Animal {
    func sound() {
        print("Any sound")
    }
}

class Dog: Animal {
    override func sound() {
        print("Bark")
    }
}

let dog = Dog()
dog.sound() // "Latido".
  1. Mutabilidade
  • Em structs, se a instância for declarada como let, você não pode alterar suas propriedades mutáveis.
  • Em classes, mesmo se a instância for let, você pode alterar suas propriedades mutáveis (desde que não sejam let dentro da classe).
struct BankAccountStruct {
    var balance: Int
}

class BankAccountClass {
    var balance: Int
    init(balance: Int) {
        self.balance = balance
    }
}

let account1 = BankAccountStruct(balance: 100)
// account1.balance = 200 // ❌ Erro: struct é imutável com let.

let account2 = BankAccountClass(balance: 100)
account2.balance = 200 // ✅ Permitido.
print(account2.balance) // 200
  1. Identidade
  • Structs não têm identidade única (são apenas valores).
  • Classes têm identidade, então você pode comparar referências usando ===.
class Person {
    var name: String
    init(name: String) { self.name = name }
}

let p1 = Person(name: "Renato")
let p2 = p1
print(p1 === p2) // true (apontam para o mesmo objeto).

Code examples

ToDo.