Como utilizar protocol, struct, class, enun e actor em Swift
Protocol, Struct e Class no Swift: Entenda as Diferenças e Quando Usar Cada Um
Se você está desenvolvendo em Swift, provavelmente já se deparou com protocol
, struct
e class
.
Mas qual a diferença entre eles? Quando usar cada um?
Neste artigo, explicamos esses conceitos de forma clara e objetiva, ajudando você a escolher a melhor opção para o seu código.
Protocol (protocolo) em Swift
Os protocolos em Swift são contratos que definem um conjunto de propriedades e métodos que devem ser implementados por structs
, classes
ou enums
.
Principais Características:
- Servem como interfaces para tipos.
- Não podem ser instanciados diretamente.
- Podem ter implementações padrão (protocol extensions).
Exemplo de Uso:
protocol Veiculo {
var velocidade: Double { get set }
func acelerar()
}
Agora, qualquer tipo que adotar Veiculo
precisará implementar velocidade
e acelerar()
.
Struct em Swift
As structs
são amplamente utilizadas por serem tipos por valor. Isso significa que, ao serem copiadas, cada instância é independente.
Principais Características:
- Tipos por valor (cópias independentes).
- Mais eficientes que classes em muitos cenários.
- Não suportam herança.
- Podem adotar protocolos.
Exemplo de Struct:
struct Carro: Veiculo {
var velocidade: Double = 0.0
func acelerar() {
print("Acelerando o carro!")
}
}
Class em Swift
As classes
são tipos por referência, ou seja, diferentes variáveis podem apontar para o mesmo objeto na memória.
Principais Características:
- Tipos por referência (apontam para o mesmo objeto).
- Suportam herança.
- Permitem polimorfismo.
- Podem ter
deinit
(para liberação de recursos).
Exemplo de Classe:
class Moto: Veiculo {
var velocidade: Double = 0.0
func acelerar() {
print("Acelerando a moto!")
}
}
Se fizermos:
let moto1 = Moto()
let moto2 = moto1
moto1.velocidade = 50
print(moto2.velocidade) // Saída: 50 (pois compartilham a mesma instância)
Diferente das structs
, onde cada cópia é independente.
Enum (Enumeração) em Swift
Os enum
são tipos especiais que representam um conjunto fixo de valores.
Principais Características:
- Tipos por valor.
- Suportam valores associados e raw values.
Exemplo de Enum:
enum TipoCombustivel {
case gasolina, alcool, eletrico
func descricao() -> String {
switch self {
case .gasolina: return "Usa gasolina"
case .alcool: return "Usa álcool"
case .eletrico: return "É elétrico"
}
}
}
Actor em Swift
Os actor
foram introduzidos no Swift 5.5 para garantir segurança concorrente.
Principais Características:
- Tipos por referência, mas protegidos contra concorrência.
- Evitam race conditions.
Exemplo de Actor:
actor ContaBancaria {
private var saldo: Double = 0.0
func depositar(valor: Double) {
saldo += valor
}
func getSaldo() -> Double {
return saldo
}
}
Uso assíncrono:
let conta = ContaBancaria()
Task {
await conta.depositar(valor: 100.0)
print(await conta.getSaldo()) // Saída: 100.0
}
Resumo das Diferenças
Tipo | Herança | Tipo de Valor ou Referência | Uso Comum |
---|---|---|---|
protocol |
Não | Depende de quem o implementa | Definir contratos/interfaces |
struct |
Não | Valor (Cópia) | Modelos de dados imutáveis |
class |
Sim | Referência | Objetos complexos e polimorfismo |
enum |
Não | Valor | Conjuntos de valores fixos |
actor |
Sim | Referência | Dados compartilhados entre threads |
Conclusão
- Use
struct
sempre que possível para evitar complicações com referências. - Escolha
class
apenas quando precisar de herança ou polimorfismo. - Utilize
protocol
para definir contratos reutilizáveis. enum
é ideal para conjuntos de valores fixos.- Se estiver lidando com concorrência,
actor
é a melhor escolha.
Agora que você entende a diferença entre protocol
, struct
, class
, enum
e actor
, pode tomar decisões mais assertivas ao escrever código Swift!
Se tiver alguma dúvida, deixe um comentário! 🚀
Comentários
Postar um comentário