Junior
Qual é a diferença entre classes e estruturas na linguagem de programação Swift?
sobes.tech IA
Resposta da IA
As classes são tipos de referência, as estruturas são tipos de valor.
Principais diferenças:
- Herança: As classes suportam herança, as estruturas não.
- Casting de tipos: Permite verificar e interpretar o tipo de uma instância de classe em tempo de execução.
- Desinicialização: As classes têm destructores (
deinit) para liberar recursos, as estruturas não. - Contagem de referências: As classes usam contagem automática de referências (ARC) para gerir a memória. As estruturas são copiadas ao serem passadas ou atribuídas (pode aplicar-se copy-on-write para otimização).
- Métodos mutáveis: Métodos que modificam as propriedades de uma instância de estrutura ou enumeração devem ser marcados com a palavra-chave
mutating. Para classes, isso não é necessário.
Exemplo de criação:
// Estrutura
struct Point {
var x: Int
var y: Int
}
// Classe
class Circle {
var radius: Double
var center: Point
init(radius: Double, center: Point) {
self.radius = radius
self.center = center
}
}
Exemplo de comportamento ao atribuir:
// Estrutura
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Cria uma cópia
point2.x = 10
print(point1.x) // Saída: 1
// Classe
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Atribuição de referência
circle2.radius = 10.0
print(circle1.radius) // Saída: 10.0