DEV Community

Beatriz da Silva
Beatriz da Silva

Posted on

Dia 10 - #100DaysOfSwift

Classes

Classes são bem parecidas com Structs mas tem algumas diferenças importantes:

1. Init

Classes não tem init padrão, caso tenha propriedades na classe você sempre tem que criar o seu próprio init ao cria-la.

Image description


2. Herança

Uma classe pode ser criada herdeira de outra classe, assim ela ganha as propriedades e métodos da classe pai; É possível adicionar novas propriedades e métodos nela.

Image description

Por segurança o Swift sempre nos faz usar super. init() em classes filho, pra caso a classe pai faça algo importante no init não tenha nenhum problema.


Sobrescrever métodos

Caso queira sobrescrever algum método da classe pai é só colocar a palavra reservada override no início da implementação do método na classe filho.

Image description


Final Class

Classes com a palavra final no início não podem ser herdadas e ter seus métodos sobrescritos, geram erro em tempo de compilação.
final também pode ser usado em métodos ou propriedades pro mesmo efeito, assim deixando o resto das coisas não marcadas com comportamento padrão pra herança.

Image description


3. Cópias

Classes são reference type, quando instanciamos uma classe a RAM aloca um espaço na memória e atribui o endereço à instância criada, objetos tipo referência apontam pro mesmo endereço de memória, por isso apontam pros mesmos dados compartilhados(mudar uma classe, muda todas), já Structs são value type, cada instância cria uma cópia exclusiva dos dados, caso uma instância seja modificada a outra não é.

Image description
Cópia de Classe

Image description
Cópia de Struct


4. Deinitializers

Classes podem ter deinitializers, que são métodos chamados quando uma instância da classe é destruída.


5. Mutabilidade

Propriedades variáveis em Classes constantes podem ser modificadas livremente, mas propriedades variáveis em Structs constantes não podem.

Image description
Propriedade variável sendo modificada em Classe constante

Image description
Erro ao tentar modificar propriedade variável em Struct constante

Top comments (0)