Back-End

28 abr, 2015

Swift 1.2 e Xcode 6.3 cheios de novidades

Publicidade

Quem achou que o lançamento do Swift 1.2 iria demorar, felizmente estava enganado. Como só estava disponível no Xcode 6.3 e o 6.2 saiu há poucas semanas, era de se esperar que o 6.3 não sairia tão rápido. O lançamento da nova versão mostra que, apesar de ser uma linguagem nova, Swift tem bases sólidas. Claro que, considerando o tamanho do ecossistema Apple, pode ser que apareçam situações que não foram previstas pelos engenheiros.

Vamos às alterações:

  • Build incremental: as classes que não sofreram alterações não serão mais recompiladas, acelerando o processo de build;
  • Executáveis mais rápidos: os builds de debug estão bem mais rápidos e os builds de release agora são feitos com otimizações que melhoraram a performance consideravelmente;
  • Melhoria nos Erros de Compilação: mensagens de erro e avisos estão mais claras, e agora o compilador exibe a opção de autoajuste (Fix-It) em mais casos;
  • Melhorias de Estabilidade: as quebras mais comuns foram solucionadas. Muitos dos avisos relacionados ao SourceKit também foram removidos.

Vamos ver um pouco de código novo. Lembrando que tem muita coisa para falar, mas vamos tentar elencar somente as mais relevantes.

Primeiro ponto: anteriormente, para fazer “cast” com o Swift usávamos somente o comando “as”, da seguinte forma:

var minhaString: NSObject = "1234"
 
var meuNumero = minhaString as String
 
// Ou validando
 
if let value = meuNumero as String{
    // faça alguma coisa que teria que ser somente se for String
}

Neste caso, não havia a necessidade de usar o optional. O problema é que em alguns casos isso pode gerar uma quebra em execução. Para manter a linguagem segura e garantir um comportamento previsível, agora temos o operador as!

Com o Swift 1.2, o mesmo exemplo ficaria assim:

var minhaString: NSObject = "1234"
 
var meuNumero = minhaString as! String
 
// Ou validando
 
if let value = meuNumero as? String{
    // faça alguma coisa que teria que ser somente se for String
}

Nesse novo modelo, o operador as faz uso do optional para validar se realmente teremos valor ou não. No primeiro caso, nós declaramos que o nosso cast será feito com sucesso, porque eu sei que virá uma string. No segundo caso foi o contrário: não temos certeza que será uma String e caso não seja ele, nem validará o nosso if, evitando erros em execução.

Segundo ponto: antes do Swift 1.2, fazer validações com if era algo quase hercúleo. Imagine que teremos que validar, por exemplo, se quatro itens têm algum valor:

if let data = Valor1{
   if data {
      if let prop = Valor2{
         if let dados = Valor 3 {
             // faça alguma coisa
         } 
      }
   }
}

Quanta coisa, não? Parece até meio estúpido fazer algo assim. Para nossa sorte, a Apple percebeu esse tipo de coisa e fez algo muito melhor e menos verboso. Agora, temos o que chamamos de “optional binding“, que funciona assim:

if let data = Valor1, let dataSource = someValid() where someValid().isTrue{
   // Faça alguma coisa
}

Não ficou mais simples? E assim como o where na validação, poderíamos colocar outros itens.

Uma observação: o uso do tipo let não é obrigatório, mas uma recomendação da própria Apple.

Terceiro ponto: inicializar ou não itens do tipo let. Antes do Swift 1.2, éramos obrigados a sempre dar algum valor na sua inicialização. Agora ainda damos valor, mas pode ser “após”:

// Antes do Swift 1.2
let valorDeConstante: CGFloat = "minha string"
 
// Após o Swift 1.2
let valorDeConstante: CGFloat
 
if minhaValidacaoExistir {
  valorDeConstante = "tenho valor"
} else {
  valorDeConstante = "sem valor"
}
 
// A partir daqui eu posso efetivamente acessar a propriedade valorDeConstante

Por algum motivo, você pode querer acessar a constante antes da validação e dar erro de execução. Por isso, não é recomendado usar esse recurso.

E por enquanto é isso! Na parte do XCode, os principais ajustes foram feitos na performance e em problemas de crash, mas ainda tem muitas coisas sendo adicionadas e corrigidas. Não se assuste com as mudanças, principalmente dos operadores as. 

Assim que você abrir um código feito antes do Swift 1.2 no Xcode 6.3 aparece uma ferramenta para “migrar” seu código para as novas formas, garantindo que ele fique atualizado com as novas práticas.

Continuo afirmando que a linguagem não está retirando ou deixando algo depreciativo. Está segura e melhorando a cada dia. Vivemos em um mundo conectado e em constantes mudanças, por isso prefiro passar longe de linguagens que não são atualizadas. Para mim, Swift veio para ficar!

Concorda, discorda ou tem alguma observação? Aproveite o campo abaixo!