English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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ídosSunday
não são implicitamente atribuídos,
……Monday
quarta-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 ObjectiveDaysofaWeek
C 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ídosSunday
não são implicitamente atribuídos,
……Monday
Saturday0
não são implicitamente atribuídos1
não são implicitamente atribuídos,
……6
eDaysofaWeek
Ao contrário, esses membros do enumerativo têm valores completos, que são previamente definidos claramente
do tipo.
weekDay
var weekDay = DaysofaWeek.THURSDAYDaysofaWeek
um valor de tipo pode ser omitido quandoweekDay
um valor possível é inferido ao inicializarDaysofaWeek
você pode usar uma sintaxe abreviada (.) para definí-lo como outroDaysofaWeek
tem
var weekDay = .THURSDAY
quandoweekDay
Quando 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.
Valores Relacionados | Valores Originais |
---|---|
Tipos de Dados Diferentes | Mesmo 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áveis | Valores 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 |
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.
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.