Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift

Swift from Scratch: Coleções e Tuplas

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Swift From Scratch.
Swift From Scratch: Variables and Constants
Swift From Scratch: Optionals and Control Flow

Portuguese (Português) translation by David Batista (you can also view the original English article)

No artigo anterior, você aprendeu sobre variáveis, constantes e um pouco sobre os tipos de dados mais comuns, como inteiros, decimais e strings. Neste artigo, vamos focar em coleções. A biblioteca padrão do Swift define dois tipos de coleções de dados, arrays e dicionários. Vamos começar com arrays.

1. Arrays

Se você estiver familiarizado com Objective-C, JavaScript ou PHP, você não vai ter dificuldades para colocar em sua cabeça o conceito de arrays. Um array é um ordenado, uma coleção com indice zero de valores. Há, no entanto, algumas diferenças importantes.

Tipo

A primeira diferença importante com os arrays de Objective-C é que os valores armazenados em um array é sempre do mesmo tipo. A princípio, isto pode parecer como uma limitação significativa, mas na verdade não é. Na verdade, essa limitação tem uma vantagem importante. Nós sabemos exatamente que tipo irá retornar quando pedirmos ao array por um dos seus valores.

Outra diferença importante com os arrays de Objective-C é o tipo dos valores que um array pode armazenar. Em Objective-C, um array só pode armazenar valores de um tipo classe. O Swift não tem essa limitação. Um array em Swift pode armazenar strings, inteiros, decimais e instâncias de classes. Como isso funciona e por que isso é possível em Swift ficará claro mais tarde nesta série, quando abordamos sobre classes e estruturas.

Declaração

A criação de um array pode ser feito de várias maneiras, você so precisa ter em mente que o Swift precisa saber que tipo de valor você deseja armazenar no array. Crie um novo playground no Xcode, como fizemos no artigo anterior e adicione as seguintes linhas ao seu playground.

A segunda linha é uma abreviação da primeira linha. Os colchetes envolvendo a palavra-chave String diz ao Swift que vamos declarar um array que só pode conter objetos do tipo String.

Você poderia ler a primeira linha de código como "Declaramos uma variável chamada array1 do tipo Array que só pode conter objetos do tipo String". Note que em itálico do tipo é o que significa os dois pontos.

A terceira linha mostra como inicializamos um array usando um array de literal. Array literais são muito similares ao array literais em Objective-C. A principal diferença é a ausência do símbolo @ antes dos colchetes e as strings literais.

Há também uma maneira elegante para inicializar um array com um número predefinido de valores padrão. A sintaxe pode ser um pouco confusa de início, mas tire um minuto a mais para entendê-la.

O array resultante contém cinco strings, cada string sendo igual a "Test". Para entender melhor a inicialização acima, dê uma olhada nas duas linhas de código a seguir em que inicializamos uma matriz de string vazia.

Não se preocupe se você ainda estiver confuso. Vamos explorar a sintaxe mais detalhadamente, uma vez que começarmos a lidar com classes e funções. Neste artigo, nós vamos nos focar apenas em coleções.

Mutabilidade

Um aspecto de Swift que você rapidamente vai apreciar é como declarar coleções mutáveis. No trecho de código acima, por exemplo, declaramos três arrays mutáveis. Um array mutável é definido usando a palavra-chave var. É tão simples. Se você não quer um array mutável, então use o let. O Swift pretende ser intuitivo e fácil de usar e a implementação mutável em Swift é um exemplo perfeito dessa meta.

Obter e definir valores

Para acessar os valores armazenados em um array, usamos a mesma sintaxe de Objective-C. No exemplo a seguir, pedimos ao array3 pelo seu segundo elemento, a string "pear".

Substituir o valor armazenado no índice 1 é tão simples como atribuir um novo valor usando a mesma sintaxe subscrita. No exemplo a seguir, podemos substituir "pear" no índice 1 por "peach".

Isto só é possível porque o array é mutável, ou seja, usamos a palavra-chave var para declarar o array. Alterar um array constante, não é possível. Existem técnicas mais avançadas para manipular o conteúdo de um array, mas o conceito base é o mesmo.

Mesclar dois arrays é tão simples como adicioná-los juntos. No exemplo a seguir, podemos declarar e mesclar dois arrays imutáveis. Note que o array resultante, c, não precisa ser mutável para que funcione.

No entanto, é fundamental que os valores armazenados em a e b sejam do mesmo tipo. O motivo deve ser obvio. Os valores armazenados em um array precisam ser do mesmo tipo. O exemplo a seguir irá resultar em um erro.

Para acrescentar um valor em um array mutável, usamos o operador +=. Observe que o operando à direita é um array. Esta operação não funcionaria se removemos os colchetes em torno de 4.

Operações

Array são objetos nos quais você pode executar uma grande variedade de operações. Arrays dispõem de uma série de funções ou métodos. Para chamar um método em um objeto, você deve usar a notação de ponto. Adicione a seguinte linha ao seu playground para adicionar um item ao array3.

Vamos ver quantos itens contém no array3 chamando seu método count. Isso retorna 4 no painel de resultados, à direita.

Também é possível inserir um item em um índice específico, invocando o método de insert do array, conforme mostrado abaixo. O método insert aceita mais de um parâmetro e pode parecer um pouco estranho no começo.

Como o Objective-C, o Swift suporta parâmetros nomeados para melhorar a legibilidade. O resultado é que o código fica mais fácil de ler e entender e funções ou métodos não precisam de muita explicação do que fazem. Fica claro, por exemplo, que o método insert insere um elemento no índice 2.

Embora Swift seja mais concisa e menos detalhada que Objective-C, ele também oferece suporte a parâmetros nomeados. Se você está vindo de PHP, Ruby ou JavaScript, então isso é certamente algo que terá que se acostumar a usar.

Métodos convenientes

O que eu realmente gosto sobre Swift é a conveniência de Ruby, como propriedades e métodos da biblioteca padrão do Swift. Um array, por exemplo, tem uma propriedade isEmpty que informa se o array contém algum elemento. Isso nada mais é do que uma forma abreviada para verificar o retorno da função count da matriz. O resultado, no entanto, é um código mais conciso e fácil de ler.

2. Dicionários

Dicionários se comportam muito semelhante aos dicionários em Objective-C. Um dicionário armazena uma coleção não ordenada de valores. Cada valor no dicionário está associado a uma chave. Em outras palavras, um dicionário armazena um número de pares chave/valor.

Tipo

Como os arrays, as chaves e os valores armazenados em um dicionário precisam ser do mesmo tipo. Isto significa que se você pergunta a um dicionário por um valor de uma chave em particular, você sabe que tipo o dicionário irá retornar.

Declaração

Declarar um dicionário é semelhante a declarar um array. A diferença é que você precisa especificar o tipo para as chaves e os valores. O exemplo a seguir mostra três maneiras de declarar um dicionário.

A segunda linha é uma abreviação para a primeira linha. As chaves destes dicionários precisam ser do tipo String, enquanto que os valores são do tipo Int. A palavra-chave var indica que os dicionários são mutáveis.

Você poderia ler a primeira linha do código como "Nós declaramos uma variável chamada dictionary1 do tipo Dictionary que pode conter apenas as chaves do tipo String e valores do tipo Int."

A terceira linha ilustra como nós podemos inicializar um dicionário usando um dicionário literal. Isto é semelhante à sintaxe que nós usamos em Objective-C, mas note que as chaves são substituídas por colchetes e a literal não é iniciada com um símbolo @.

Obter e definir valores

Acessar valores é semelhante a acessar valores de um array. A unica diferença é que você usa a chave ao invés de usar o índice do valor que você precisa acessar. O exemplo abaixo demonstra isto.

Você notará que o Xcode nos diz que o valor do value não é 3, mas Optional(3). O que isso significa? O Swift usa opcionais para empacotar valores que podem ser uma de duas coisas, um valor ou nil. Não se preocupe com opcionais neste ponto. Vamos focar em opcionais no próximo artigo desta série. Deixe-me dizer que opcionais são outro conceito-chave da linguagem Swift.

É interessante destacar que a sintaxe para acessar um dicionário é idêntica ao de um array, se as chaves do dicionário são do tipo Int. Dê uma olhada no exemplo a seguir para ver o que quero dizer.

Operações

Como em arrays, a biblioteca do Swift define uma ampla gama de operações que você pode executar em dicionários. Um dicionário retorna o número de pares chave/valor chamando a função count. Remover um par chave/valor é fácil e intuitivo, como o exemplo seguinte ilustra. Claro, que isso só é possível se o dicionário for mutável.

Quando você começa a aprender Swift, ocasionalmente você se depara com trechos de código que vão parecer estranhos ou confusos. Dê uma olhada na linha a seguir, em que primeiro declara um dicionário e depois remove seus pares chave/valor.

Você tem que admitir que a última linha parece um pouco estranha. Como o Swift sabe os tipos das chaves e valores que podem ser armazenados no dictionary, esvaziar o dicionário é tão simples como atribuir um dicionário vazio.

Não há nenhuma necessidade de especificar os tipos das chaves e valores neste caso, porque já fizemos quando declaramos o dicionário na primeira linha. Isso destaca outro detalhe importante, ou seja, o tipo de valores que você pode armazenar em arrays e dicionários não podem mudar uma vez que a coleção é declarada.

3. Tuplas

Você vai amar as tuplas. Apesar das tuplas não serem coleções, elas também agrupam múltiplos valores. Similares a arrays e dicionários, as tuplas podem conter valores de qualquer tipo. A principal diferença, no entanto, é que os valores armazenados em uma tupla não precisam ser do mesmo tipo. Vejamos um exemplo para explicar mais detalhadamente.

O primeiro exemplo declara uma tupla com o nome de currency do tipo (String, Int). A segunda tupla, time, contem uma instância NSDate e uma string. Os valores armazenados em email são ambos do tipo String, o que significa que email é do tipo (String, String).

Acessando valores

Índices

Para acessar um valor armazenado em uma tupla, você usa o índice que corresponde ao valor que você tem interesse.

O Xcode nos mostra os índices de cada valor armazenado em uma tupla no painel de resultados à direita do playground.

Nomes

Para melhorar a legibilidade, você pode nomear os valores armazenados em uma tupla. O resultado é que você pode acessar os valores da tupla através de seus nomes em vez de seus índices. Declarar uma tupla fica um pouco diferente nesse caso.

Decomposição

Há uma segunda forma mais elegante para trabalhar com os valores armazenados em uma tupla. Dê uma olhada em como decompomos o conteúdo da currency no exemplo a seguir.

O valor da currency no índice 0 é armazenado em currencyName e o valor do índice 1 é armazenado em currencyRate. Não há nenhuma necessidade de especificar o tipo para currencyName e currencyRate ja que o Swift infere o tipo dos valores armazenados em currency. Em outras palavras, currencyName é do tipo String e currencyRate é do tipo Float.

Se você só está interessado em um valor específico de uma tupla, você pode usar um caractere de sublinhado para dizer ao Swift quais os valores que você não está interessado.

Aprenda mais em nosso Curso de Programação em Swift

Leve seu aprendizado em Swift para o próximo nível e aprenda sobre tudo, desde Playgrounds até Programação Orientada a Objetos em nosso curso completo de desenvolvimento em Swift.

Conclusão

Arrays e dicionários são componentes fundamentais de quase todas as linguagens de programação e em Swift não é diferente. Apesar das coleções se comportarem um pouco diferente em Swift, não leva tempo para se familiarizar com os tipos de coleção do Swift se você trabalhou com arrays e dicionários em outras linguagens de programação. No próximo tutorial, vamos explorar opcionais e controle de fluxo.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.