Usando RxSwift para construir UIs simplesmente testáveis
Um live-coding experimental que vai construir um view controller usando RxSwift, view models e um padrão arquitetural baseado em fronteiras em vez de camadas
estão entre 1 e 10? let sequence = (1 ... 10) sequence .map({ $0 * 3 }) // Multiplica elementos por 3 .filter({ $0 % 2 == 0 }) // Remove elementos ímpares .forEach({ x in assert(x % 2 == 0) print(x) })
de forma assíncrona... let sequence = /* sequência assíncrona de números entre 1 e 10 */ sequence .map({ $0 * 3 }) // Multiplica elementos por 3 .filter({ $0 % 2 == 0 }) // Remove elementos ímpares .subscribe(onNext: { x in assert(x % 2 == 0) print(x) })
longo tempo, permitindo que eles sejam manipulados como sequências usando operadores funcionais Estas sequências podem ser combinadas, transformadas e observadas usando funções puras* *funções que não causam efeitos colaterais e sempre retornam o mesmo valor para cada conjunto de parâmetros
taps em botões, input de texto em formulários, respostas de APIs, atualizações de localização geográfica e praticamente tudo o que é assíncrono e baseado em eventos Todas estas tarefas viram sequências de valores, que são muito fáceis de testar
emitidos e transformados de forma assíncrona ao longo do tempo permite usar TDD para escrever todo o comportamento da UI (validação de input e lógica de apresentação) A mesma abstração permite testar a aparência da nossa UI usando testes de snapshots sem usar mocks, pois permite que o código de UI lide apenas com valores que entram e valores que saem, sem depender de objetos de negócio
de teste https:/ /github.com/fellipecaetano/heimdall-api • Repositório oficial do RxSwift https:/ /github.com/ReactiveX/RxSwift • RxMarbles http:/ /rxmarbles.com • Boundaries, talk de Gary Bernhardt https:/ /www.destroyallsoftware.com/talks/boundaries
tenho pouco mais de 6 anos de experiência trabalhando com tecnologias Apple; • Nasci e fui criado e Campinas e antes da Sympla trabalhei na Movile e na Dextra, primariamente como desenvolvedor iOS mas também como desenvolvedor full- stack; • Sou entusiasta de desenvolvimento JavaScript e uso a evolução do ecossistema como ponto de partida para minhas pesquisas; • Minha especialidade é buscar soluções altamente testáveis e simples de evoluir para problemas de várias faixas de complexidade; • Você consegue me encontrar no Twitter, GitHub, LinkedIn e no Slack da comunidade brasileira do CocoaHeads ✌