Usando Protocolos como ObservableObject
Dica Rápida de SwiftUI e Combine
Fala desenvolvedores! Depois de muito sem escrever um artigo estou de volta para contar um pouco da minha jornada com o desenvolvimento iOS em SwiftUI e com o Combine.
Estou reescrevendo todo o código do +Sangue para SwiftUI e toda criação das Views foram bem tranquilas mas quando comecei a criar minhas ViewModels foi onde encontrei alguns problemas e são soluções que a "Internet" não tem falado tanto então vim compartilhar elas com vocês.
No SwiftUI uma das arquiteturas mais simples de ser implementada é o MVVM, até ai tudo certo, só que em vários lugares o pessoal coloca no init da View uma classe concreta, quebrando totalmente o princípio do SOLID
Pensando nisso, pensei em só fazer uma pequena alteração que meu @ObservedObject a poderia ter do tipo do meu protocolo:
mas a Apple não quis facilitar minha vida.
Não podemos fazer um protocolo ser um @ObservedObject mesmo ele implementando o protocolo ObservableObject.
Tomamos o seguinte erro:
Depois de muitas tentativas e erros e quase desistindo de fazer desse modo finalmente descobri como poderíamos implementar o protocolo. Vamos usar os famoso generics. Vamos fazer a nossa view receber um tipo T (você pode colocar o nome que quiser) onde ele deve ser do tipo do meu protocolo eai vem o macete, falar que a propriedade ObjectWillChangePublisher do nosso tipo T tem que ser igual a ObservableObjectPublisher
Bom espero que esse artigo tenha salvado vocês de algumas horas de frustração que eu tive durante esse pedaço de desenvolvimento do +Sangue.
Muito Obrigado!