Sobes.tech
Junior

Como aceder aos objetos de classe e aos objetos de estrutura em Swift?

sobes.tech IA

Resposta da IA

A objetos de classe — por referência; a objetos de estrutura — por valor.

Classes (tipo de referência):

Ao atribuir uma instância de classe a uma variável ou constante, é atribuída uma referência à mesma instância. As alterações feitas através de uma referência refletirão em todas as referências que apontam para essa instância.

class MinhaClasse {
    var valor: Int = 0
}

let objeto1 = MinhaClasse() // Criação de uma instância
let objeto2 = objeto1   // objeto2 agora aponta para a mesma instância
objeto1.valor = 10      // Alteramos através de objeto1
print(objeto2.valor)    // Vai mostrar 10 - a alteração é visível através de objeto2

Estruturas (tipo por valor):

Ao atribuir uma instância de estrutura a uma variável ou constante, é criada uma cópia dessa instância. Cada variável/constante contém sua própria cópia independente dos dados. Alterações numa cópia não afetam as outras.

struct MinhaEstrutura {
    var valor: Int = 0
}

var estrutura1 = MinhaEstrutura() // Criação de uma instância
var estrutura2 = estrutura1   // Uma cópia de estrutura1 é criada
estrutura1.valor = 20          // Alteramos através de estrutura1
print(estrutura2.valor)        // Vai mostrar 0 - estrutura2 permanece inalterada

Comparação:

Característica Classes Estruturas
Tipo Referência Valor
Atribuição A referência é copiada O valor é copiado
Alterações São visíveis em todas as referências Afetam apenas a cópia
Herança Suportada Não suportada
Identidade Pode ser verificada (===) Não há conceito de identidade

A escolha entre classe e estrutura depende dos requisitos. Estruturas são frequentemente usadas para tipos de dados pequenos e simples que representam um valor (por exemplo, Point, Size, Range). Classes são usadas para tipos de dados mais complexos que requerem semântica de referência, herança ou gestão do ciclo de vida do objeto (por exemplo, UIViewController, UIView).