Back
Close

Classes and Struct - (Properties)

Carlos.Hairon
1,456 views

Propriedades (Atributos)

Stored Properties

  • Uma constante (let) ou variável (var) que é parte de um instância de classe ou struct
  • Tipo mais simples, sendo possível atribuir um valor default

==> Crie uma classe e objetos conforme a figura (https://www.dropbox.com/s/1gn0mljjlo5rn7i/classe.png?dl=0) e exponha uma situação em que uma propriedade tem um valor default em tempo de execução.

Lazy Stored Properties

  • É uma propriedade a qual seu valor só é calculado quando é usada a primeira vez
  • Usada onde valores iniciais dependem de fatores externos
  • Usada quando existe uma inicialização custosa ou complexa
  • A palavra-chave (palavra-reservada) é lazy

==> Veja o exemploa abaixo. Você consegue pensanr em uma situação custosa computacionamente? Veja esse artigo:

Inglês: https://www.hackingwithswift.com/example-code/language/what-are-lazy-variables

Portugês (tradução google) : https://www-hackingwithswift-com.translate.goog/example-code/language/what-are-lazy-variables?_x_tr_sl=en&_x_tr_tl=pt&_x_tr_hl=pt-BR&_x_tr_pto=nui

==> Use sua criatividade e crie uma simulação (semelhante ao exemplo) em que se justifique um atributo lazy.

Computed Properties (Propriedades Calculadas)

  • Não armazenam um valor propriamente dito, por exemplo, a densidade demográfica é por definição a razão de habitantes/km2. Logo se existir um atributo num de habitantes e área não é necessário ter um atributo que armazene um valor (densidade demográfica), mas que seja calculado quando precisar.

  • Provêm um getter (veja que tem um return) e um setter (veja que tem um parâmetro de entrada). Em alguns caso não o setter não é necessário.

  • No exemplo abaixo o centro de um retângulo é calculado em função de sua posição (x,y => canto superior esquerdo => Top Left).

==> Faça um desenho esquemático para o exemplo abaixo, a ideia é exibir um plano carteziano e mostrar a dinâmica das estruturas

==> Faça uma nova versão do exemplo abaixo em que as formas simplificadas de get e set sejam expostas. Por exemplo, é opcional o uso do identificador get e também é opcional exibir o nome do parâmetro para o set (nesse caso para acessar o parâmetro implicito usa-se o identificador newValue dentro do método set)

==> Faça um exemplo (use a criatividade) em que apareçam atributos calculados, sugestão densidade demográfica, força (f=ma), etc.

Read Only Computed Properties

  • Mesma coisa que o exemplo anteiror em que só é implemetado o getter. Veja que neste exmplo isso foi implementado de forma simplificada (opcional), ou seja, não foi necessário expor o identificador get. A implementação do get vem logo depois do nome do atributo (area)

  • Veja que precisamos importar a biblioteca Foundation de modo a usar a função de potência pow().

==> Crie uma struct para para resolver equações do segundo grau. Que atributos você você escolheria como read only ?

Property Observers

  • Respondem a mudanças no valor de uma propriedade

  • São chamados sempre que o valor é atribuído, mesmo quando não difere do atual

  • Podemos usar os Observers willSet e didSet

  • willSet é chamado exatamente antes de o valor ser armazenado.

  • didSet é chamado imediatamente após um novo valor ser armazenado.

  • No exemplo abaixo o atributo nome está relacionado ao método willSet (exatamente antes=>will). Assim imediatamente antes do nome ser mudado o método willSet será executado e mostrará o novoNome.

  • No mesmo exemplo abaixo o atributo nome está relacionado ao método didSet (imediatamente após=>did). Assim imediatamente após do nome ser mudado o método didSet será executado. Atenção para a variável oldValue (fornecida pelo Swift) assimvocê pode fazer acesso ao valor do atributo nome antes da mudança.

==> Faça uma classe chamada ContaPassos. O programador poderá inserir um novo número de passos. Assim, mostre o novo número de passos e a quantidade anterior usando propriedades Observers

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io