Middle
O que significa que o tipo de valor (value type) pertence ao tipo de referência (reference type)?
sobes.tech IA
Resposta da IA
O valor do tipo é copiado ao atribuir ou passar para uma função, enquanto que o valor do tipo de referência é passado por referência, ou seja, o ponteiro para a instância existente é copiado.
Tipos de Valor (Value Types):
- Estruturas (struct)
- Enumerações (enum)
- Tuples (tuple)
- A maioria dos tipos básicos (Int, String, Bool, Array, Dictionary, Set, etc.)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // O valor de p1 é copiado para p2
p2.x = 10
// p1.x ainda é 1, p2.x tornou-se 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")
Tipos de Referência (Reference Types):
- Classes (class)
- Funções (closures de funções)
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 o mesmo exemplo que c1
c2.x = 10
// c1.x também se tornou 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")
Principais diferenças:
| Característica | Tipo de Valor (Value Type) | Tipo de Referência (Reference Type) |
|---|---|---|
| Atribuição | Cópia do valor | Cópia da referência (ponteiro) |
| Memória | Alocada na pilha (para casos simples) | Alocada no heap |
| Uso compartilhado | Cada variável tem sua própria cópia | Várias variáveis podem referenciar a mesma instância |
| Mutabilidade | Para modificar, é preciso modificar a cópia | A alteração através de uma referência é visível para todos |
No desenvolvimento iOS, ambos os tipos são frequentemente utilizados. Conhecendo suas diferenças, você pode escolher o tipo adequado para cada tarefa e evitar efeitos colaterais indesejados, especialmente ao trabalhar com dados mutáveis.