Swift - Variáveis, Tipos, Tuplas, Enumerações e Operadores
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Constantes e Variáveis
Constantes e variáveis associam um identificador como myName
ou currentTemperature
com o valor de um particular tipo, onde o identificador pode ser usado para recuperar o valor. A diferença entre constante e variáveis é que a variável pode ser atualizada/modificada mesmo depois de ter recebido um valor inicial. As contantes depois de definidas com um valor inicial não podem ser mais alteradas.
Pesquise por conta própria e documente as respostas
- Que tipo de implicações negativas as variáveis podem trazer para nossa aplicação?
- Quais regras devemos respeitar para criar indicadores válidos em Swift?
- Você criou uma constante com o seu nome. Na linha seguinte você tenta atualizar esta constante. O que irá acontecer?
- Swift é uma linguagem de tipo seguro. O que isso significa?
- Swift é uma linguagem que possibilita a inferência de tipo. O que isso significa?
Sugestão
Utilize o espaço abaixo para declarar constantes e variáveis para que você possa se familiarizar com o estilo do Swift.
Tipos numéricos
Swift contém alguns tipos numéricos, para que possamos utilizar números inteiros e pontos flutuantes em nossas aplicações.
Tipos numéricos existentes em Swift: Int
, Double
, Float
.
Uma coisa muito legal é que Swift ignora underlines e interpreta o valor como se os underlines não existissem, isso pode contribuir para a criação de constantes mais legíveis.
Pesquise por conta própria e documente as respostas
- Swift tem vários subtipos do tipo
Int
. Quais são eles e quais são suas diferenças? - Qual a diferença entre os tipos Float e Double?
isMultiple(of:)
O tipo Int
em Swift tem um método chamado isMultiple(of:)
, que pode ser muito usado. Este método permite você verificar se um número é múltiplo de outro. Sem este método poderíamos fazer algo como o seguinte código:
Agora vamos usar o método isMultiple(of:)
, teremos algo como:
Com este método não signifca eliminaremos muito código, mas o uso dele fará nosso código muito mais legível e fácil de entender.
Tentando somar tipos diferentes
Suponha que você tem duas variáveis, onde uma é do tipo Int
e a outra é do tipo Double
. Se você realizar uma operação de soma entre elas o que irá acontecer?
Se você tentar executar este código, provavelmente receberá o seguinte erro: operator + cannot be applied to operands of type Int and Double
. Este erro acontece porque estamos tentando adicionar dois números que possuem tipos númericos diferentes, e isto não é permitido. Para adicionar um número Int
com um número Double
, nós precisamos converter o tipo Int
para Double
. O código abaixo mostra como podemos fazer isso:
O tipo Boleano
Valores boleanos são frequentemente usados como resultado de uma operação lógica que pode resultar em verdadeiro ou falso.
Swift tem o tipo Bool
variáveis ou constantes do tipo Bool
podem assumir dois valores true
ou false
.
Constantes e variáveis booleanas podem ser definidas da seguinte forma:
Valores booleanos são mais usados especialmente quando estamos trabalhando com declararações condicionais, como: if
, while
e guard
. Por exemplo, o que o código abaixo irá fazer?
Se você tiver respondido que este código irá exibir no console (vulgo printar), Irado, não quero esperar para aprender isso
, então você está correto. Esta linha é exibida no console porque a constante swiftIsCool
tem o valor true
, enquanto a variável itIsRaining
tem o valor false
, por isso o texto: Pegue uma capa de chuva
não é exibido no console.
toggle()
Na maioria das linguagens quando você quer alternar o valor de uma variável do tipo booleano, você faz algo como:
Ao executar este bloco de código perceberá que o valor final da variável itIsRaining
será true
, isso acontece porque o operador !
representa negação.
Em Swift as variáveis/constantes do tipo Bool
possuem um método chamado toggle()
que é utilizado para alternar/inverter o valor da variável.
Assim como o método isMultiple(of:)
presente em variáveis do tipo Int
, o método toggle()
tem o objetivo de deixar seu código mais legível e fácil de entender.
O tipo String
String é uma coleção ordenada de caracteres. Textos como Hello, World!
e Swift
seriam representados em nossa aplicação por variáveis ou constantes do tipo String
.
Abaixo um código bem familiar, ele mostra como definir duas variáveis do tipo String:
Também podemos criar uma string usando um literal de string de várias linhas. O código a seguir mostra como podemos fazer isso:
Desde que uma String é uma coleção ordendada de caracteres, nós podemos iterar e percorrer caractere por caractere de uma String. O código abaixo mostra como fazer isso:
Outra opção para percorrer todos os caracteres de uma String
é utilizando map()
:
Não se assuste com o map()
caso ainda não o conheça iremos conhecê-lo com mais profundidade nos próximos capítulos.
Concatenação de Strings
Para concatenar Strings
podemos utilizar dois operadores +
ou +=
.
Interpolação de Strings
Para efetuar uma interpolação de Strings podemos usar o operador \()
.
Mutabilidade
Em Swift, nós definimos a mutabilidade de variáveis e coleções usando as palavras chaves let
e var
.
Se nós definirmos uma variável String
usando var
ela é mutável, isto significa que nós podemos editar e mudar o seu valor. Se nós definirmos uma constante String
usando let
ela é imutável, isto significa que não podemos mudar o seu valor uma vez que ela é configurada.
O código abaixo mostra a diferença entre Strings
mutáveis e imutáveis:
Pesquise por conta própria e documente as respostas
- Qual método podemos utilizar para deixar todos os caracteres de uma String maíusculos? E minúsculos?
Comparando Strings
Swift provê quatro caminhos para comparar Strings
, são eles:
- Igualdade
- Igualdade no prefixo
- Igualdade no sufixo
- E a validação se uma String é vazia
Pesquise por conta própria e documente as respostas
- Execute o código acima, entenda como cada forma de comparação funciona e documente.
- Swift é case sensitive? E o que isso significa?
Tuplas
Tupla é um grupo de múltiplos valores dentro de um único tipo. Estes valores não necessariamente precisam ser do mesmo tipo. O seguinte exemplo mostra como definir uma tupla:
No exemplo anterior criamos uma tupla que contém duas strings, dois inteiros, e um double. Os valores de uma tupla podem ser decompostos em um conjunto de variáveis.
Os valores de uma tupla podem também ser recuperados por uma localização específica do valor. O exemplo mostra como nós podemos recuperar os valores por sua localização.
Com tuplas nomeadas você evita o passo da decomposição. Uma tupla nomeada associa um nome(chave) com cada elemento da tupla. O código abaixo mostra como criar uma tupla nomeada.
Valores de uma tupla nomeada podem ser acessadas usando a sintaxe do .
. Nós podemos acessar o elemento da tupla da seguinte forma: team.city
. No código anterior o elemento team.city
irá conter a string Boston
.
Enumerações
Enums são um recurso extraordinariamente poderoso do Swift, e você os verá sendo usados de muitas maneiras e lugares.
Na sua forma mais simples, um enum é simplesmente um bom nome para um valor. Podemos fazer um enum chamado Direction
com casos para north
, south
, east
, e west
, e fazer referência a eles em nosso código. Claro, poderíamos ter usado um número inteiro em vez disso, nesse caso nos referiríamos a 1, 2, 3 e 4, mas você realmente se lembra do que 3 significa? E se você digitou 5 por engano?
Então, enums são uma maneira de dizermos Direction.north
algo específico e seguro. Se tivéssemos escrito Direction.thatWay
e não existisse tal caso, o Swift simplesmente se recusaria a construir nosso código. Nos bastidores, o Swift pode armazenar seus valores de enumeração de maneira muito simples, então eles são muito mais rápidos de criar e armazenar do que algo como uma string.
À medida que você progride, você aprenderá como o Swift nos permite adicionar mais funcionalidades às enumerações – elas são mais poderosas no Swift do que em qualquer outra linguagem que eu já tenha visto.
Vamos definir agora uma enumeração que contém uma lista de planetas:
Uma vez que o tipo da variável é inferido, nós podemos então atribuir um novo valor sem utilizar o prefixo Planets
.
Nós podemos comparar os valores de um enum usando o tradicional operador de igualdade ==
ou usando switch
.
Nota: Ainda não vimos como funciona o switch
, mas não se preocupe que veremos ele em detalhe mais a frente. Por agora só queremos ilustrar o seu uso com uma enumeração.
O seguinte exemplo mostra como usar o operador de igualdade e o switch
em um enum:
Enumerações podem ser preenchidas com valores brutos (raw value
). O seguinte exemplo mostra como definir uma enumeração com valores do tipo String
.
Em Swift, enumerações podem ter também valores associados, eles permitem armazenar informações adicionais junto com os casos do enum, estes valores podem ser de qualquer tipo e os tipos também podem ser diferentes para cada membro. Vamos ver como nós podemos usar valores associados definindo uma enumeração chamada Product
.
O caso .book
possui três valores associados, são eles dos tipos: Double
, Int
e Int
. Enquanto o caso .puzzle
possui dois valores associados dos tipos Double
e Int
. Nós podemos extrair os valores associados como uma constante usando a palavra chave let
, mas nós podemos extrair valore associados como variáveis também com a palavra chave var
.
Operadores
Um operador é um símbolo ou combinação de símbolos que podemos usar para verificar, alterar ou combinar valores. Usamos operadores na maioria dos exemplos até agora, mas não os chamamos especificamente de operadores. Nesta seção, mostraremos como usar a maioria dos operadores básicos que Swift suporta.
Operador de atribuição
O operador de atribuição =
inicializa uma variável ou uma constante. E também é utilizado para atualizar os valores de uma variável.
Operadores de comparação
Operadores de comparação retornam um valor booleano true
se a afirmação for verdadeira ou false
se a firmação não for verdadeira.
- Igualdade: varA
==
varB - Não igual: varA
!=
varB - Maior que: varA
>
varB - Maior que: varA
<
varB - Maior ou igual: varA
>=
varB - Menor ou igual: varA
<=
varB
Abaixo alguns exemplos:
Operadores aritméticos
Os operadores aritméticos performam as quatro operações básicas da matemática.
- Adição: varA
+
varB - Subtração: varA
-
varB - Multiplicação: varA
*
varB - Divisão: varA
/
varB
Abaixo alguns exemplos:
Operador de resto
O operador de resto %
, calcula o resto da divisão do primeiro operando dividido pelo segundo. Em outras linguagens, isso às vezes é chamado de módulo ou operador de módulo.
Abaixo segue um exemplo:
Operadores de atribuição composta
Os operadores de atribuição compostos: +=
, -=
, *=
e \=
combinam um operador aritmético com um operador de atribuição.
Operador de intervalo fechado
O operador de intervalo fechado, ...
, define um intervalo que vai do primeiro ao segundo número. Os números são separados por três pontos.
Abaixo segue um exemplo, notem que no exemplo estamos usando for
, mas fiquem tranquilos se ainda não conhecerem esta estrutura de repetição, pois vamos cobrir este tipo de estrutura de repetição no playground referente a controle de fluxo.
Execute o código abaixo e analise a saída do mesmo.
Operador de intervalo semi-aberto
O operador de intervalo semi-aberto, ..<
, define um intervalo que vai do primeiro número até o segundo número menos um. Os números são separados por dois pontos e o sinal de menor que.
Execute o código abaixo e compare a saída obtida aqui com a saída do playground anterior.
Operador ternário
O operador condicional ternário atribui um valor a uma variável com base na avaliação de um operador de comparação ou valor booleano.
Segue o protótipo e abaixo um código mostrando o uso do operador ternário:
boolValue ? valueA : valueB
Operador lógico NOT
O operador lógico NOT
, mais conhecido como !
inverte o valor de um booleano.
Operador lógico AND
O operador lógico AND
, mais conhecido como &&
, retorna true
se ambos os operandos forem true
; caso contrário, ele retorna false
.
Operador lógico OR
O operador lógico OR
, mais conhecido como ||
retorna true
se um dos operandos for true
.