Sobes.tech
Junior — Middle

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 como Int, 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 struct ou enum, é 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.