Back
Close

Enumerations - Swift

Carlos.Hairon
1,337 views

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.

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