Sobes.tech
Junior

Qual é a diferença entre tipos de referência e tipos de valor?

sobes.tech IA

Resposta da IA

Os Tipos de Valor (Value Types) são copiados ao atribuir ou passar para uma função. Cada instância tem a sua própria cópia dos dados.

Os Tipos de Referência (Reference Types), ao serem atribuídos ou passados para uma função, passam uma referência à mesma instância de dados. Alterar os dados através de uma referência afetará todas as outras referências a essa mesma instância.

Característica Tipo de Valor (Value Type) Tipo de Referência (Reference Type)
Comportamento ao atribuir/passar Cópia Passagem de referência
Localização na memória Pilha (Heap) Montão (Stack)
Gestão de memória Automática (através da pilha) Automática (ARC)
Exemplos em Swift struct, enum, tuple class, func, closure
// Exemplo de Tipo de Valor (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 recebe uma cópia de p1
p2.x = 10   // Alterar p2 não afeta p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Exemplo de Tipo de Referência (Classe)
class Coordinate {
    var x: Int
    var y: Int
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 referencia ao mesmo objeto que c1
c2.x = 10   // Alterar c2 afeta c1, pois ambos apontam para o mesmo objeto
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10