Usando Enum com Swift 2.2

Hoje vamos falar um pouco sobre os Enums no Swift 2.2 .

Os Enums servem para categorizar valores, como por exemplo os naipes de um baralho, que em Swift podem ser definido das seguintes maneiras:

[markdown]

“`
enum Naipes {
  case Ouros
  case Copas
  case Espada
  case Paus
}

“`
[/markdown]

ou

[markdown]

“`
enum Naipes {
  case Ouros, Copas, Espadas, Paus
}

“`
[/markdown]

E ele pode ser usado da seguinte forma:

[markdown]

“`
//Setando diretamente na inicialização da variavel
let meuNaipe = Naipes.Ouros

//Definindo uma variavel do tipo Naipe, e setando o valor posteriormente
var meuOutroNaipe: Naipes
meuOutroNaipe = .Espada

“`
[/markdown]

Podemos também criar enums com valores associados.E Podemos acessar esses valores usando a propriedade rawValue.

Como por exemplo, um enum para os meses do ano, pode ser iniciado das seguintes maneiras:

[markdown]

“`
enum Mes: Int {
  case Jan = 1
  case Fev = 2
  case Mar = 3
  case Abr = 4
  case Mai = 5
  case Jun = 6
  case Jul = 7
  case Ago = 8
  case Set = 9
  case Out = 10
  case Nov = 11
  case Dez = 12
}

“`
[/markdown]

ou

[markdown]

“`
//Assume valores de 2 a 12 para os enumeradores sem valor associado diretamente
enum Mes: Int {
  case Jan = 1, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez
}

“`
[/markdown]

Variáveis do tipo do enum Mes, podem ser criadas das seguintes maneiras:

[markdown]

“`
//utilizando o “nome” do enumerador
let mes = Mes.Mar
print(mes.rawValue) // 3

//utilizando o valor numérico correspondente ao mês, utilizando o rawValue
let outroMes = Mes(rawValue: 6) // Jun

“`
[/markdown]

O enum no Swift também nos permite criar funções internas, o que facilita e agiliza muito o desenvolvimento. Veja o exemplo utilizando o enum Mes, com duas funções.

[markdown]

“`
enum Mes: Int {
  case Jan = 1, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez

  func nomeMes() -> String {
    switch self {
    case .Jan:
      return “Janeiro”
    case .Fev:
      return “Fevereiro”
    case .Mar:
      return “Março”
    case .Abr:
      return “Abril”
    case .Mai:
      return “Maio”
    case .Jun:
      return “Junho”
    case .Jul:
      return “Julho”
    case .Ago:
      return “Agosto”
    case .Set:
      return “Setembro”
    case .Out:
      return “Outubro”
    case .Nov:
      return “Novembro”
    case .Dez:
      return “Dezembro”
    }
  }
}

“`
[/markdown]

Podemos usar as funções da seguinte forma:

[markdown]

“`
print(mes.nomeMes()) //Março
print(outroMes!.nomeMes()) //Junho

“`
[/markdown]

Os enums no Swift nos permite também, passar parâmetros para os Enumeradores, veja o exemplo abaixo, utilizando nacionalidade.

[markdown]

“`
enum Nacionalidade {
  case Estrangeira
  case Brasileira(documento: String)

  func Documento() -> String {
    switch self {
    case .Estrangeira:
      return “Nacionalidade estrangeira, não tem documento associado”
    case let .Brasileira(documento):
      return “Nacionalidade Brasileira, documento: \(documento)”
    }
  }
}

var nacionalidade = Nacionalidade.Estrangeira
print(nacionalidade.Documento()) //Nacionalidade estrangeira, não tem documento associado

nacionalidade = .Brasileira(documento: “123.234.345-45”)
print(nacionalidade.Documento()) //Nacionalidade Brasileira, documento: 123.234.345-45

“`
[/markdown]

Com isso já conseguimos usar os recursos mais comuns dos enums do Swift 2.2

O arquivo .playground com os códigos desse post esta disponível no github

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>