Classes and Struct - (Properties)
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
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().
- Ref Inglês: https://www.ictdemy.com/swift/basics/mathematical-functions-in-swift
- Ref Português (google tradutor): https://www-ictdemy-com.translate.goog/swift/basics/mathematical-functions-in-swift?_x_tr_sl=en&_x_tr_tl=pt&_x_tr_hl=pt-BR&_x_tr_pto=nui
==> 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