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
- simulador ou device
- search
- arquivos
- filtro dentro dos arquivos
- árvore de views
- identity inspector
- attributes inspector
- size inspector
- connections inspector
- object library
- add new constraints
- align constraints
- embed in stack (botão da maldade)
- update frames
- propriedades e métodos. Use //MARK: – para organizar os métodos e facilitar a manutenção do código
- assistant editor (usamos para puxar outlets)
- breakpoint
- continuar execução
- variables view
- console
iOS
- versão atual: 11.1
- para o curso utilizamos iOS 10
- An Illustrated History of iOS
- lifecycle simplificado de um UIViewController
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