Swift - Enumerações
Uma enumeração é um tipo de dados definido pelo usuário que consiste em um conjunto de valores relacionados. Palavra-chaveenum é usado para definir o tipo de dados enumerado.
Funcionalidade de enumeração
A enumeração no Swift 4 também se assemelha à estrutura de C e do Objetivo C.
Ele é declarado em uma classe e seus valores são acessados por meio da instância dessa classe.
O valor do membro inicial é definido usando inicializadores de enum.
Sua funcionalidade também é estendida, garantindo a funcionalidade do protocolo padrão.
Sintaxe
Enumerações são introduzidas com a palavra-chave enum e colocam toda a sua definição dentro de um par de chaves -
enum enumname {
// enumeration values are described here
}
Por exemplo, você pode definir uma enumeração para os dias da semana da seguinte forma -
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
Exemplo
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
Welcome to Closures
A enumeração do Swift 4 não atribui valor padrão a seus membros, como C e Objetivo C. Em vez disso, os membros são explicitamente definidos por seus nomes de enumeração. O nome da enumeração deve começar com uma letra maiúscula (Ex: enum DaysofaWeek).
var weekDay = DaysofaWeek.Sunday
Aqui, o nome de enumeração 'DaysofaWeek' é atribuído a um dia da semana variável. Ele informa ao compilador que o tipo de dados pertence a Sunday e será atribuído a membros subsequentes de enum dessa classe específica. Depois que o tipo de dados do membro enum é definido, os membros podem ser acessados passando valores e outros cálculos.
Enumeração com declaração de switch
A instrução Swift 4 'Switch' também segue a seleção de múltiplas vias. Apenas uma variável é acessada em um determinado momento com base na condição especificada. O caso padrão na instrução switch é usado para interceptar casos não especificados.
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .India:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
Climate is Cold
O programa primeiro define Clima como o nome da enumeração. Em seguida, seus membros como 'Índia', 'América', 'África' e 'Austrália' são declarados pertencentes à classe 'Clima'. Agora, o membro América é atribuído a uma variável de temporada. Além disso, o caso Switch verá os valores correspondentes a .America e se ramificará para essa instrução específica. A saída será exibida como "Clima é frio". Da mesma forma, todos os membros podem ser acessados por meio de instruções switch. Quando a condição não é satisfeita, ele imprime por padrão 'O clima não é previsível'.
A enumeração pode ser posteriormente classificada em valores associados e valores brutos.
Diferença entre valores associados e valores brutos
Valores Associados | Valores Brutos |
Tipos de dados diferentes | Mesmos tipos de dados |
Ex: enum {10,0.8, "Hello"} | Ex: enum {10,35,50} |
Os valores são criados com base em constante ou variável | Valores pré-preenchidos |
Varia quando declarado a cada vez | O valor para o membro é o mesmo |
Enum com valores associados
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
Student Marks are: 98,97,95.
Considere, por exemplo, acessar o nome do aluno e as marcas garantidas em três disciplinas. O nome da enumeração é declarado como aluno e os membros presentes na classe enum são o nome que pertence ao tipo de dados da string, as marcas são representadas como mark1, mark2 e mark3 do tipo de dados Inteiro. Para acessar o nome do aluno ou as notas que ele pontuou
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
Agora, o caso de troca imprimirá o nome do aluno se esse bloco de caso for executado, caso contrário, ele imprimirá as marcas garantidas pelo aluno. Se ambas as condições falharem, o bloco padrão será executado.
Enum com valores brutos
Os valores brutos podem ser strings, caracteres ou qualquer um dos tipos de número inteiro ou de ponto flutuante. Cada valor bruto deve ser exclusivo em sua declaração de enumeração. Quando inteiros são usados para valores brutos, eles aumentam automaticamente se nenhum valor for especificado para alguns dos membros de enumeração.
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
Value of the Month is: 5.