Faz tempo que não publico nada, eu sei. Mas precisava compartilhar esse resumão atualizado em Swift, principalmente porque prometi pra essa turma linda aí em cima que participou do meu mini curso de iOS. Espera ai, que curso?

Do dia 06/11 ao dia 11/11 o IFSP São Carlos realizou a WeComp, um evento que visa aproximar os alunos do mercado de trabalho. Eu fui chamada pra oferecer um workshop de iOS e junto do Carlos Menzoni (aquela fofurinha de óculos e camiseta de dinossauros do meu lado) apresentamos os conceitos mais utilizados no desenvolvimento mobile para iPhones.

O projeto final que usei está no meu GitHub ❤️

Os conteúdos apresentados foram os seguintes:

  • Swift
  • XCode
  • iOS
  • Estrutura de projeto
  • Storyboard
  • Constraints
  • ScrollView
  • UINavigationController
  • TableView
  • Segue
  • Tab bar
  • Segmented control
  • Custom UIView
  • Keyboard
  • BarButtonItem
  • UIAlertController
  • Delegate
  • Animations (vou criar um post só com isso por ser um tema mais longo)

No último dia dos cursos eu procuro sempre fazer um resumo relembrando tudo que ensinei nos dias anteriores, assim os participantes podem ter uma visão geral de tudo que aprenderam. Esse post é um ponto de referência com todo o conteúdo do tal resumo :]

Swift

  • let – propriedade com conteúdo imutável
  • var – propriedade com conteúdo mutável

https://gist.github.com/3706c5eb3516dd32ee32fb9c599b7c38

  • optional – uma propriedade que pode ter conteúdo ou a ausência dele
    • símbolo “?” é o marcador de optional
    • símbolo “!” é o marcador de unwrap
    • para usar um optional é necessário fazer a verificação do conteúdo
      • guard let 
      • if let

https://gist.github.com/9e981920054e29d5e8145e74b8c3bfdf

  • declaração de classe

https://gist.github.com/5e5941ce0d92738579d6332afbffd0ca

  • declaração de struct
    • pode ser usada como uma forma de criar “namespaces

https://gist.github.com/888187fcef49c4f79d36e4fd683131b4

  • declaração de enum
    • pode ser usada como uma forma de criar “namespaces

https://gist.github.com/34c45920926598f66d8eabf93706d57f

  •  functions
    • keywork func + nome do método + parâmetros entre parênteses + -> + tipo do retorno
    • pode ser criado um alias para o nome do parâmetro
      • (aliasOutOfFunction aliasInsideFunction: Type)
      • quando a função é chamada, usa-se o  aliasOutOfFunction
        • pode ser substituído por “_” para que não precise ser colocado nada
      • dentro da função usa-se o aliasInsideFunction

https://gist.github.com/80052f84adc5e8db9f1ef75c36720284

XCode

  1. simulador ou device
  2. search
  3. arquivos
  4. filtro dentro dos arquivos
  5. árvore de views
  6. identity inspector
  7. attributes inspector
  8. size inspector
  9. connections inspector
  10. object library
  11. add new constraints
  12. align constraints
  13. embed in stack (botão da maldade)
  14. update frames

  1. propriedades e métodos. Use //MARK: – para organizar os métodos e facilitar a manutenção do código

  1. assistant editor (usamos para puxar outlets)

  1. breakpoint
  2. continuar execução
  3. variables view
  4. console

iOS

Estrutura de projeto

  • sempre divida seus arquivos em groups por contexto
  • para dividir seu código por contexto use //MARK: – dentro das classes
  • ao criar uma pasta no finder, clique com o botão direito em cima da pasta no XCode e selecione “Add files to
    • não esqueça de marcar a opção “create groups” em options

 Storyboard

  • IB – interface builder
  • XIB – xml + interface builder
  • conjunto de XIBs

Constraints

  • regras de posicionamento
  • relação entre componentes
  • top, bottom, leading (esquerda), trailing (direita)
  • lembre de remover o “Relative to Margins” (que adiciona 16pts nas margens esquerda/direita)

ScrollView

  • coloque todas as constraints em zero (em relação a parent view)
  • coloque uma UIView dentro da ScrollView e coloque todas as constraints em zero (em relação a ScrollView)
  • coloque uma constraint de Equal Widths entre a UIView dentro da ScrollView e a parent view
  • coloque uma constraint de Height fixa, depois de pinar todos os componentes dentro da view, remova a constraint de altura

UINavigationController

  • faz o controle de um fluxo de navegação
  • todo storyboard que tem o começo de um fluxo deve ter uma navigation controller
    • deve ser o entry point do storyboard
  • já faz o controle do back button (inclusive com swipe)
  • a relação entre a navigation e o primeiro view controller é de “root view controller

TableView

  • registrar a classe e o nib das cells

https://gist.github.com/56852de86450e0ec1bd5872a6490b187

  • delegate
  • data source
    • dois métodos obrigatórios

https://gist.github.com/56852de86450e0ec1bd5872a6490b187

Segue

  • ligação entre duas telas
  • pode ser de dois tipos
    • push (pop para voltar)
    • present (dismiss para voltar)
  • coloque um identifier
    • pode usar uma struct para guardar os valores dos identifiers

https://gist.github.com/489a6536a0e307229e408580b64cf627

  • pode ser feito programaticamente

https://gist.github.com/eb9dfcaf1632f43f4d1f6730d58f4364

Tab Bar

  • cada tab tem um fluxo independente
  • o tab bar icon tem que ser colocado na navigation bar de cada fluxo
  • a relação entre a TabBarController e a Storyboard reference é “View Controllers

Segmented control

  • use a propriedade selectedSegmentIndex para saber a posição atual
  • crie uma IBAction do tipo ValueChanged para atualizar a tela de acordo com a posição

Custom UIView

  • coloque o File Owner class como a classe de mesmo nome do XIB
  • implemente os init methods na classe
  • utilize @IBDesignable para conseguir ver o layout dentro dos outros XIBs/Storyboards

https://gist.github.com/c44760b06227310b70af63dd3adc366e

Keyboard

  • para esconder o teclado, troque o tipo da UIView para UIControl e puxe uma IBAction do tipo “Touch Up Inside“, dentro do método finalize a edição da view

https://gist.github.com/aaedf862437337d3b8c45fb1ba168dcd

Bar Button Item

  • pode ser criado um botão ou um array de botões

https://gist.github.com/b35ec99dd5ee2767c07050ff50923e69

UIAlertController

  • não esqueça de incluir uma action

https://gist.github.com/2916aff24445b5d2eb6db6a561c7d79f

Delegate

  • uma maneira de enviar conteúdo para trás
  • No view controller 2
    • implemente o protocolo
    • crie uma variável do tipo do protocolo
    • chame o método do protocolo

https://gist.github.com/6442cc4ffcd2e562d1fe1f2a1f9387ed

  • No view controller 1
    • conforme com o protocolo
    • sete self como delegate do view controller 2 no momento do segue
    • implemente os métodos obrigatórios

https://gist.github.com/438aaf14ceff2320745e736c25cfdc9b