Sobes.tech
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