Programação Swift: Controlo de fluxo, funções e extensões

swift

Estamos a desenvolver um pequeno curso de iniciação à programação em Swift, utilizada nos dispositivos da Apple e no artigo anterior escrevemos sobre variáveis, conteúdo que pode consultar aqui. No artigo de hoje vamos avanças um pouco mais e falar de controlo de fluxo, funções e extensões.

Este artigo fala sobre controlos de fluxo como os conhecidos de outras linguagens, if´s, for´s, while´s, foreach entre outros, utilização de funções em swift (criar e utilizar) e de extensões para adicionar funcionalidades a classes já existentes ou criadas por nós.

NOTA : Na versão 2.0 da linguagem, a função println deixou de existir. Passa a ser somente print. A razão de não ter mudado o código para a versão 2.0 é precisamente para se ter a noção que estes pormenores estão constantemente a mudar pois esta, não é uma linguagem muito madura.

 

Controlo de fluxo

Vamos começar por onde terminamos. No ultimo artigo, exemplifiquei a utilização de arrays e dicionários. No próximo exemplo demonstra a utilização de um ciclo for para iterar sobre um array de Strings criado anteriormente.

let nomes = ["Diogo","João","Tiago","Tomás]
for n in nomes {
 println(n)
}

 

No anterior código revemos o que foi já demonstrado no anterior artigo sobre variáveis, a declaração de um array. Seguidamente é feito um normalíssimo ciclo for para iterar sobre cada elemento do array.

O ciclo é composto por uma variável (n) que vai a cada iteração conter o valor do índice (começa no 0) do array.

Este método de iterar o array seria igual a:

for (var i = 0; i < nomes.count; i++) {
 println(nomes[i])
}

Para iterar um dictionary a sintaxe é um pouco diferente.

for (key,value) in idade{
//Imprime o par chave-valor
    println("chave: \(key) --  valor: \(value)")
}

O anterior exemplo iria imprimir o índice do array dado pela variável i declarada no ciclo for. Mete-se também no exemplo anterior um método que devolve o tamanho do array(count).

Podemos com a mesma filosofia utilizar o ciclo while para iterar o array.

var i = 0
while (i < nomes.count){
    println(nomes[i])
    i++
}

Utilizamos também para controlar o fluxo do código o if.

let swift = true
if (swift){
    println("Swift power")
}else if(!swift){
    println("Muda para Swift")
}

Ou podemos também utilizar o do while. A grande diferença é que este ciclo é sempre corrido pelo menos uma vez ao contrário do ciclo while.

do{
    i++
}while(i < nomes.count)

Temos também disponível o switch. Um switch é na sua essência uma sequência de if´s.

var linguagem = "swift"
switch (linguagem){
    case "c","c#":
        println("Quero algo da apple")
        break;
    case "objective-c":
        println("Já é apple. Mas quero swift")
        break;
    case "swift":
        println("Vamos começar a programar")
        break;
    default:
        break;
}

A sintaxe é muito parecida a outra linguagens de programação. Podemos como demonstrado no primeiro case especificar duas opções. O swift tem SEMPRE de ter um caso default.

Funções

A criação de funções é bastante simples. Para isso utilizamos a palavra func seguida do nome da função. No seguinte exemplo é criada a função swiftingPt sem argumentos e que não devolve nenhum valor, somente imprime a mensagem “Estou dentro da função”.

func swiftingPt(){
 println("Estou dentro da função")
}

A próxima função aceita como argumento uma string que representa um dia da semana.

func swiftingPt(diaSemana: String){
 println("Estou dentro da função e hoje é "+diaSemana)
}

Como ultimo exemplo de declaração de funções falta só uma função que retorne alguma coisa.

func swiftingPt() -> String{
return "É um bom dia para programar "
}

Para utilizar a anterior função é igual a outras linguagens.

println(swiftingPt())
//imprime "É um bom dia para programar"

Extensões

As extensões em swift servem para adicionar funcionalidades de uma forma organizada a classesenumeradores ou estruturas.

No próximo exemplo é criada uma extensão para o tipo de variáveis do tipo String.

extension String{
    var welcome: String {return self + "Bem vindo ao swift"}
    var goodBye: String {return self + "Volta sempre e... Keep on swifting"}
}

A partir de agora todas as variáveis do tipo String podem ter duas extensões:

  • welcome – Retorna a variável declarada e o texto “Bem vindo ao swift”
  • goodBye –  Retorna a variável declarada e o texto “Volta sempre e… Keep on swifting”

Um exemplo de utilização seria.

var pessoa = "João ".welcome
println("\(pessoa)")   //João Bem vindo ao swift
pessoa = "João ".goodBye
println("\(pessoa)") //João Volta sempre e... Keep on swifting

Esta é uma simples extensão que demonstra o poder das extensões. Com o tempo e a prática vão achar esta funcionalidade muito útil.

Por hoje é tudo. No próximo artigo vamos criar um projeto do zero.

Qualquer dúvida deixem nos comentários que ficarei contente por esclarecer.

Fonte das imagens