Enumerations - Swift
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Enumerations - Intro
Um Enumeration define um tipo para um grupo de valores associados, permitindo trabalhar com eles de uma maneira type-safe (tipos seguros) dentro do seu código. Assim, você cria uma faixa de valores que podem ser usado e evita falta de padronização em seu código.
Enumerations são tipos de primeira classe, ou seja:
- Podem ser retorno de funções
- Podem ser passadas com paramêtros em funções
- Podem ser construÃdas em tempo de execução
Além de adotar funcionalidades tradicionalmente suportadas apenas por classes, tais quais:
- Inits
- Funções de instância e estáticas
- Podem ser extendidas
- Assinar protocolos
- PossuÃr variavéis computadas
Enumerations - Intro - Prática 01
==> Começamos a declaração de dois enums abaixo, mas não colocamos todos os itens. Você pode gerar uma nova versão com todos os itens de cada conjunto ?
Enumerations - Intro - Prática 02
Cada enumeration define um novo tipo, e como outros tipos em Swift seus nomes devem começar com uma letra maiúscula.
Vamos agora atribuir a uma constante direction um Cardinal. Lembre-se de trazer sua declaração para aqui também.
==>Você poderia fazer outras declarações de costante e variáevis para os planetas?
Enumerations - Switch e Enums
Enums podem ser usados com Switches de maneira muito simples.
Um switch deve ser exaustivo quando utilizado enums, quando não for apropriado um caso para cada enum, você pode utilizar o default
Vamos criar um switch que imprima uma String de acordo com o Cardinal dado.
==> Você pode completar o enum com os demais porntos cardeias e fazer com o o switch possa prever todos os casos sem o defeault?
Enumerations - Switch e Enums + Variáveis Computadas
Podemos também como comentado, atribuir variavéis computadas aos nossos Enums. Ainda não falamos de extension (extensões), por hora encare como o próprio nome sugere uma foma de adicionar "atributos e métodos" a um enum.
Enumerations - Switch e Enums + Variáveis Computadas - Prática
Use o seu enum de planetas e crie um atributo Double para devolver os diâmetros equatoriais de cada planeta dos sistema solar (https://planetario.ufsc.br/o-sistema-solar/). Em seguida exiba o diâmetro de 3 planetas
Iterando entre cases de Enumeration
Para alguns enums, é interessante que tenhamos uma coleção com todos os possiveis casos, para isso, tudo que você precisa fazer é assinar o protocolo CaseIterable
.
Ainda não falamos de protocolos, mas são semelhantes as interfaces do JAVA e especificam um tipo de "herança". Assim a caracterÃstica dos cases (itens do enum) serem percorridas por um for, por exemplo, torna-se possÃvel.
==> Vamos declarar um Enum que assine o protocolo e iterar sob seus casos. Você pode fazer um for e interar sobre os seus planetas ? lebre-se que o seu enum de plantas deve impementar o protocolo CaseIterable
Enumeration - Associated Values (Valores Associados)
No Swift Enumerations podem associar valores de qualquer tipo a seus cases. Isso permite:
- Armazenar informações adicionais ao case
- Informações variadas a cada uso dentro do código
- Associar tipos diferentes para cada case
==> Vejamos no exemplo que foram declarados 3 tipos de dispositivos da Apple. Vocês poderiam declarar mais 2?
Por que foi necessário usar "if" no seguinte código:
//if case let .iPad(nome, tela, preco) = deviceCarlos { // print ("Nome do Dispositivo: (nome)") // print ("Tela em Polegadas: (tela)") // print ("Preço: (preco)") //}
==> Faça também um exemplo disso também e comente porque é necessário o uso do "if" aqui (lembre-se dos opcionais)
==> faça também um exemplo agora com "if..else" em que o else é executado.
Enumerations - Raw Values
Raw Values (valores crus, primários) são valores valores padrões para os cases de um enumeration. Raw Values são sempre do mesmo tipo
Enumerations - Atribuição implÃcita
Você pode atribuir um valor de .rawValue como no exemplo anterior e o swift tentará colocar um valor para o próximo case (elemento) se você não deixar explÃcito. Veja qual será o valor de venus.
==> Teste nenhum valor para mercury, o que acontece com venus ? E se o valor de mercury fosse 20 qual seria o valor de mars? Mostre o código para esses exemplos.
==>Veja agora que nenhum valor foi atribuÃdo. Você pode exlicar o que ocorre na seguinte linha: print(CompassPoint.south.rawValue.uppercased()) ? Você pode criar outro exemplo ?
==>Você poderia interar em todos os elementos do enum com um for e imprimir o número de caracteres de cada um da strings associadas ao case? Pesquise o atributo de tamanho de string na documentação do swift.