Como distinguir os tipos de dados baseados em referências dos tipos de dados que armazenam valores diretamente?
sobes.tech IA
Resposta da IA
Em iOS (Swift e Objective-C), os tipos de dados dividem-se em tipos de valor (value types) e tipos de referência (reference types).
-
Os tipos de valor armazenam os dados diretamente. Ao atribuir ou passar para uma função, é criada uma cópia dos dados. Em Swift, estes incluem estruturas (
struct), enumerações (enum), bem como tipos básicos comoInt,Double,Bool. -
Os tipos de referência armazenam uma referência a uma área de memória onde os dados estão localizados. Ao atribuir, a referência é copiada, não os dados em si. As alterações através de uma referência são visíveis noutras. Em Swift, estes são classes (
class).
Como distinguir:
- Em Swift, se um tipo é declarado como
structouenum, é um tipo de valor. - Se declarado como
class, é um tipo de referência.
Exemplo:
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - a cópia não mudou
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - ambas as variáveis apontam para o mesmo objeto
Desta forma, pelo comportamento ao atribuir e modificar, é possível distinguir os tipos baseados em referências daqueles que armazenam valores diretamente.