Dia 2 - #100DaysOfSwift
Tags: todayilearned, swift, ios
Published: 2023-05-26 02:34:28

## Arrays
São coleções de dados de um mesmo tipo que podem armazenar tanto dados primitivos(como Int, String, Bool) como classes e objetos; São usados pra guardar mais de um valor em apenas uma variável e pode conter dois ou mais valores iguais.

Cada espaço num array é chamado de elemento, cada elemento é representado por um número que sempre começa em 0 e chamamos de índice.

O array abaixo guarda o nome dos membros da equipe X-Men da abertura do evolution, são 8 membros, então o array tem 8 elementos, com índices que vão do 0 ao 7.

```
let xMen = ["Ciclope", "Jean Grey", "Spyke", "Wolverine", "Tempestade", "Vampira", "Lince Negra", "Noturno"]
```

É possível criar um array vazio e preenche-lo depois:

`var xMen = [String]()`

Se você tentar acessar um índice que não existe vai _crashar_ o código, por exemplo, se você tentar acessar o índice 8 no array `xMen[8]`.


## Sets
Também são coleções de dados, mas diferente do array, ele guarda os dados de forma desordenada e não guarda itens repetidos, cada elemento é único, por isso caso coloque o mesmo elemento duas ou mais vezes, ele vai ignorar e guardar o elemento apenas uma vez e por ser desordenado não é possível acessar os elementos com índices. 

Usamos o set ao invés do array quando precisamos garantir que cada elemento aparecerá apenas uma vez no conjunto e a ordem dos elementos não é importante.

`let viloes: Set = ["fenix negra", "apocalipse", "magneto"]`

É possíver criar um set vazio e depois preenche-lo:

`var viloes = Set<String>()`


## Tuplas
Assim como o array, as tuplas permitem armazenar vários conjuntos de dados numa mesma variável, mas não é possível adicionar ou remover itens de uma tupla, elas tem um tamanho fixo; Não é possível mudar o tipo dos itens numa tupla depois dela criada.

`var nome = (primeiroNome: "Laura", sobrenome: "Kinney")`

Você pode acessar um elemento de uma tupla usando o índice(que também começa em 0):

`nome.0`

ou um nome que você deu pro elemento:

`nome.primeiroNome`

Você pode mudar o valor de dentro da tupla depois dela criada, mas não o tipo, se tentasse mudar pra (primeiroNome: "Logan", idade: 57) retornaria um erro.


## Dicionários
É parecido com um array, mas no dicionário você escolhe a chave identificadora ao invés de ele criar isso automaticamente em forma de índice, os elementos são guardados em forma de **chave : valor**

```
let paises = [
    "Noturno": "Alemanha",
    "Wolverine": "Canadá",
    "Mancha Solar": "Brasil"
]
```

Caso um elemento não seja encontrado o dicionário retorna nil, é possível colocar um valor default pro dicionário quando ele não encontrar a chave entre os elementos:

`paises["Vampira", default: "Desconhecido"]`

É possível criar um dicionário vazio e depois preencher os elementos dele:

`var paises = [String: String]()`

`paises["Vampira"] = "Estados Unidos"`


## Enums
É um jeito de definir um grupo de valores relacionados de um jeito que seja fácil de usa-los, por exemplo um enum poderia ser usado pra definir à qual grupo um mutante pertence:

```
enum Grupo {
    case instituto
    case irmandade
    case morlocks
}
```

`let tempestade = Grupo.instituto`

Enums também podem guardar valores associados à cada case, por exemplo um enum de ações simples:

```
enum Acao {
    case andando(destino: String)
    case falando(assunto: String)
    case voando(onde: String)
}
```

let falando = Acao.falando(assunto: "como derrotar o magneto")


> Um bom lugar pra conseguir mais informações sobre como algo em Swift ou de um framework da Apple funciona com exemplos é a **Developer Documentation**, pra acessar a doc pelo Xcode:

> Atalho de teclado - Command + Shift + 0
> Menu superior do Xcode - Help >> Developer Documentation