SwiftUI: dicas para quem quer começar a desenvolver
Depois de quase dois anos do lançamento, resolvi compilar em um pequeno artigo a minha experiência desenvolvendo com SwiftUI
3 de junho de 2019, começava mais uma WWDC e junto dela, o início de uma nova era no desenvolvimento para o iOS: surgia ali o SwiftUI. Pode parecer exagero, mas me atrevo a dizer que essa foi a maior revolução para esta plataforma desde o surgimento do Swift.
E assim como foi com Swift, quando muitos desenvolvedores viraram o nariz por que já desenvolviam com Objective-C, outros muitos (ou os mesmos) viraram o nariz para o SwiftUI. Mas a história se repetiu também para o outro lado, os desenvolvedores que abraçaram essa nova forma de criar layouts para os devices das Maçã criaram diversos tutoriais internet a fora de como criar telas bem completas e começaram a encorajar cada vez mais outras pessoas a fazerem o mesmo.
Nessa leva de pessoas, acabei me empolgando e apesar de adorar os Storyboards e Xibs da vida, comecei a ver cada vez mais benefícios em adotar o SwiftUI no meu dia a dia. É claro que usar isso em produção naquele período, parecia um exagero e até mesmo um tiro no pé, ainda mais tratando-se de um framework tão recente com pouca prova de que poderia dar certo.
Ainda sim, vários desenvolvedores começaram a mostrar que sim, isso era possível. Óbvio que eram casos isolados, apps pequenos com poucos recursos e um ou outro grande caso de sucesso real.
Até que veio a WWDC 2020 trazendo diversas evoluções para o SwiftUI e trazendo talvez a mais importante prova de que esse é sim o caminho que a Maçã quer seguir: os Widgets. A grande nova funcionalidade do iOS 14 era 100% feita em SwiftUI o que fez com que grande parte dos desenvolvedores olhassem para esse novo framework com outros olhos.
Foi a partir dai que vi que seria possível utilizar o SwiftUI em produção, seja no app pequeno ou em um app de grande porte. Assim como foi com o Swift, não seria necessário entrar de cabeça e reescrever todo o app da noite pro dia, excluindo todas as Storyboard e Xibs e queimando qualquer evidência deles do código. Longe disso…
Então aqui, vou dar algumas dicas importantes para a adoção do SwiftUI em seu projeto baseado na experiencia que tive nesses quase dois anos:
1. Comece Pequeno:
Como já comentei, o ideal é seguir os passos que foram dados com o Swift, ao invés de jogar tudo fora, pode se começar pequeno, com telas pequenas ou novas funcionalidades que possam ser feitas do zero e estejam apartadas do resto do sistema (de preferencia que você tenha um certo tempo para se acostumar com a nova linguagem e todo o novo desenvolvimento).
Na conversão de Objective-C para Swift, lembro de muitos artigos que diziam: comece pelas classes de suporte, como utilitárias e modelos. Avance conforme for possível sem afobação.
Aqui a premissa é a mesma: pegue uma nova funcionalidade pequena. E é bom notar que o SwiftUI possui duas grandes formas de integração com o UIKit que são indispensáveis para essa migração. Temos o UIHostingViewController que cria uma interface entre o SwiftUI e o UIKit, e o UIViewControllerRepresentable que faz o papel inverso ao do HostingViewController mas que abre um leque de opções e oportunidades de criação.
2. Analise o que será usado:
Aqui entramos em um ponto negativo do SwiftUI que afasta muita gente: nem todos os componentes já estão disponíveis. Como exemplo, temos WKWebView, UINavigationBar, ou o UISlider que só apareceu no iOS 14.
Mas apesar desse ponto negativo, nem tudo está perdido. Lembram-se do UIViewControllerRepresentable que comentei na dica anterior? Então, graças a ele conseguimos criar essa ponte entre os dois e deixar tudo bem transparente para o desenvolvimento. Além disso, ainda é possível acessar os componentes UIKit no init da classe:
3. Tenha calma, bugs existem (e acontecem):
Vou parecer repetitivo, mas assim como foi a transição para o Swift, o SwiftUI possui bugs. Se você der uma olhada no fórum de desenvolvimento da Apple, irá encontrar alguns. Mas assim como ele possui bugs, a comunidade vem encontrando formas de solucioná-los antes que a própria Maçã.
Como estou brincando com o SwiftUI desde o primeiro dia que ela liberou para nós desenvolvedores (é sério, fui um pouco ansioso), pude perceber como a comunidade abraçou esse framework e como vem ajudando a melhorá-lo dia após dia, seja com tutoriais ou seja com soluções para bugs ainda não resolvidos (algumas soluções são bem "criativas", então é sempre bom ter um filtro).
Mas como costumo falar, se até o UIKit possui bugs mesmo tendo anos de vida, imagina o SwiftUI que acabou de nascer.
4. Você vai aprender rápido:
Se uma coisa que eu já aprendi desenvolvendo para iOS foi que ou você ama ou você odeia Storyboard. Se você ama, deve adorar usar constraints e todo o esquema de arrastar para a criação de uma tela. Mas se você odeia, provavelmente é adepto de criar a sua tela 100% via código, usando o Storyboard ou as Xibs apenas quando for realmente necessário e deixando sempre para o último caso.
E não há problema nenhum nisso, o único porém, é que sempre ouvi reclamações que todo esse esquema de criações de tela era chato ou demorado. Fora que fazer um merge com Storyboard pode ser um verdadeiro martírio. Quem nunca fez um merge e não conseguiu abrir mais a tela?
O SwiftUI parece preencher essa lacuna. Primeiro que para quem trabalha com Swift é muito rápido apreender a criar telas com ele. Segundo, os tutoriais na internet são variados (vou recomendar alguns até o final desse texto, prometo!), a própria Apple criou um tutorial em seu site para criação de telas (pasmem, é bem documentado e muito bem feito!).
Além desses dois fatores, temos também o fato de que ele é 100% declarativo, o que o torna fácil de se entender até mesmo para aqueles que não conhecem o mundo iOS. Os componentes são bem descritivos e fáceis de serem usados, aqui você não precisa se preocupar com constraints, as Stacks (VStack, HStack ou ZStack) resolvem praticamente todos os problemas de organização de tela. Ainda posso adicionar aqui, que isso atrai desenvolvedores de outras linguagens como por exemplo a galera do React Native e Flutter, que seguem a mesma linha.
5. Codifique e veja (ou não):
Agora um benefício que tem sido o meu "ame-o ou odeio-o" do SwiftUI: o Preview. Essa funcionalidade que exibe o que está sendo codificado em uma janela do Xcode, facilita e muito o desenvolvimento. Você consegue visualizar toda a sua criação enquanto codifica sem precisar ficar rodando o app toda hora, o que em teoria acelera bastante todo o processo.
Eu disse em teoria, pelo simples fato de que se existem bugs com essa nova forma de criação de telas e é aqui onde eles estão mais concentrados. Seja na hora de criar uma tela usando um elemento UIKit ou seja por que você simplesmente esqueceu uma chave perdida em algum lugar ou até mesmo por que seu Macbook tem alguns anos de vida, e por conta disso ele poderá respirar bem alto pra visualizar uma simples tela. É claro que quanto mais simples o projeto, mais fácil e tranquilo será de visualizar a sua view. Mas isso ainda não é verdade para projetos complexos e muito grandes.
A primeira vez que você for criar uma nova tela em SwiftUI nesses projetos mais complexos, provavelmente você perderá algum tempo no primeiro build para visualizar a sua nova criação. Quase como um Clean Build… Mas depois disso, as coisas ficam mais rápidas e como eu disse no início desse tópico, facilitam muito a vida (até você encontrar algum bug novo que ninguém mais encontrou: reporte-os a Apple, vamos ajudar os amigos desenvolvedores de Cupertino).
Existe ainda a funcionalidade de live preview, onde você consegue rodar a view diretamente no aparelho. Outra funcionalidade bem legal e que gosto muito de usar, é a facilidade de criação de previews diferentes, aqui é possível criar diversos previews de iPhones e coloca-los em uma mesma tela de desenvolvimento, isso ajuda bastante.
6. Seja reativo, apenas no seu código:
E por último, se você curte programação reativa como por exemplo RxSwift, vai ficar feliz em saber que o SwiftUI é 100% reativo mas com suporte total da própria Apple. Ele possui diversas anotações que facilitam de mais o desenvolvimento e que permite você a criar telas que sejam totalmente reativas. Vale notar também que a empresa lançou no mesmo ano o Combine, um framework próprio de desenvolvimento reativo que "compete" diretamente com o RxSwift mas com a facilidade e a segurança do desenvolvimento ser feito "dentro de casa".
Inclusive, a própria empresa incentiva o uso do SwiftUI em conjunto do Combine utilizando MVVM como design patern de desenvolvimento. Mas esse é um assunto para outro artigo 🙂.
Mas e vocês, já estão desenvolvendo com SwiftUI? Estão curtindo? Comentem aqui embaixo o que vocês estão achando!
Abraços e vamos codar!
Tutoriais recomendados e material de referência: