English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Enumeração Swift

Dito de forma simples, um enumerador é um tipo de dados, exceto que esse tipo de dados contém apenas dados específicos personalizados, é um conjunto de dados com características comuns.

Os enumeradores no Swift são semelhantes às estruturas do Objective C e C, com as funcionalidades de:

  • É declarado dentro de uma classe e pode ser acessado através da instânciação da classe.

  • Os enumeradores também podem definir construtores (initializers) para fornecer um valor membro inicial; podem ser estendidos com base na implementação original.

  • Pode cumprir protocolos (protocols) para fornecer funcionalidades padrão.

Sintaxe

No Swift, usamos a palavra-chave enum para criar enumeradores e colocamos toda a definição entre chaves grandes:

enum enumname {
   // Definição do enumerador aqui
}

Por exemplo, definimos o seguinte enumerador para representar os dias da semana:

import Cocoa
// Definir enumeração
enum DaysOfWeek {
    case .Sunday
    case .Monday
    case .TUESDAY
    case .WEDNESDAY
    case .THURSDAY
    case .FRIDAY
    case .Saturday
}
do tipo.
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:
    print("Domingo")
case .Monday:
    print("Segunda-feira")
case .TUESDAY:
    print("Terça-feira")
case .WEDNESDAY:
    print("Quarta-feira")
case .THURSDAY:
    print("Quarta-feira")
case .FRIDAY:
    print("Sexta-feira")
case .Saturday:
    print("星期六")
}

O resultado de execução do programa acima é:

case .Saturday:

print("sábado") no exemplo,não são implicitamente atribuídosSundaynão são implicitamente atribuídos,……Mondayquarta-feira)é um valor definido neste enumerativo (comomembro do valor(oumembro)。case

palavra-chave indica que um novo valor de membro será definido na linha seguinte. Atenção:-e C e ObjectiveDaysofaWeekC Diferente, no Swift, os membros do enumerativo não recebem um valor inteiro padrão ao serem criados. No exemplo acima,no exemplo,não são implicitamente atribuídosSundaynão são implicitamente atribuídos,……MondaySaturday0não são implicitamente atribuídos1não são implicitamente atribuídos,……6eDaysofaWeekAo contrário, esses membros do enumerativo têm valores completos, que são previamente definidos claramente

do tipo.

weekDayvar weekDay = DaysofaWeek.THURSDAYDaysofaWeekum valor de tipo pode ser omitido quandoweekDayum valor possível é inferido ao inicializarDaysofaWeekvocê pode usar uma sintaxe abreviada (.) para definí-lo como outroDaysofaWeektem

var weekDay = .THURSDAY

quandoweekDayQuando o tipo é conhecido, pode-se omitir o nome do enumerativo. Usar valores de enumerativo explícitos pode melhorar a legibilidade do código.

Os enumerativos podem ser divididos em valores relacionados e valores originais.

Diferença entre Valores Relacionados e Valores Originais

Valores RelacionadosValores Originais
Tipos de Dados DiferentesMesmo Tipo de Dados
Exemplo: enum {10,0.8,"Hello"Exemplo: enum {10,35,50}
Os valores são criados com base em constantes ou variáveisValores Pré-Fillados
Os valores relacionados são definidos quando você cria um novo constante ou variável com base em um membro do enumerativo, e podem ser diferentes a cada vez que você faz isso.Os valores originais são sempre os mesmos

Valores Relacionados

Neste exemplo, definimos um tipo enumerativo chamado Student, que pode ser um String de Name ou um valor relacionado de Mark (Int,Int,Int).

import Cocoa
enum Student{
    case Name(String)
    case Mark(Int,Int,Int)
}
var studDetails = Student.Name("w3codebox")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
    print("O nome do aluno é: \(studName)。"
case .Mark(let Mark1, let Mark2, let Mark3)
    print("Al desempenho do aluno é: \(Mark1),\(Mark2),\(Mark3)。")
}

O resultado de execução do programa acima é:

A nota do aluno é: 98,97,95.

Valores Originais

Os valores originais podem ser strings, caracteres, ou qualquer valor inteiro ou valor de ponto flutuante. Cada valor original deve ser único em sua declaração de enumeração.

Para enumerações com valores originais inteiros, não é necessário atribuir explicitamente a cada membro, o Swift fará isso automaticamente por você.

Por exemplo, ao usar números inteiros como valores originais, o valor de atribuição implícita aumenta sequencialmente.1. Se o primeiro valor não for inicializado, ele será automaticamente configurado como 0.

import Cocoa
enum Month: Int {
    case Janeiro = 1, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro
}
let yearMonth = Month.May.rawValue
print("O mês numérico é: \(yearMonth).")

O resultado de execução do programa acima é:

O mês numérico é: 5.