Expressões condicionais pós-fixadas em SwiftUI

Juliano Vaz
Apple Developer Academy | UFPE
2 min readJun 15, 2021
Photo by Sigmund on Unsplash

Em Swift, existem vários tipos de expressões, como expressões de prefixo, expressões binárias, expressões primárias e expressões pós-fixadas. Ao avaliar uma expressão retorna-se um valor, causando um efeito colateral.

Recentemente, com Swift 5.5, a partir da proposta de Rintaro Ishizaki, a Apple implementou melhorias para construção de condicionais de expressões pós-fixadas. Ou seja, a partir do momento da compilação, o código mudará seu resultado a depender do valor dessas condicionais em determinados contextos.

Como as linguagens da família C, esse pré-processamento das chamadas diretivas/macro de compilação condicional ocorre puramente no nível de análise lexical (Lexing/Tokenization), o que não traz latência para o compilador. Na verdade, é algo que a linguagem se beneficia.

Apesar desse papo parecer de baixo nível, resolve um problema recorrente com SwiftUI, porque agora se pode adicionar modificadores opcionalmente a uma view de uma forma mais clean.

Por exemplo, essa mudança nos permite criar uma visualização de texto com dois tamanhos de fonte diferentes, dependendo se estamos usando iOS ou outra plataforma:

Lembrando que para ser uma expressão condicional pós-fixada ela deve começar com ponto, como um modifier, isto é, .algumMétodo().

Outro ponto interessante que é agora é possível evitar duplicação de código, por exemplo, no código abaixo, podemos ver que a linha 6 e 9 se repetem, pois devem ser aplicadas independente do sistema operacional (os).

Poderia-se codificar de outra forma para evitar essa duplicação? Poderíamos, como sugere Rintaro, mas ainda ainda de a legibilidade fica comprometida, tendo criado uma variável temporária:

Hoje, com Swift 5.5, esses trechos acima podem ser rescritos dessa forma, onde a linha 6 (.commonModifier) será atribuída ao Text View independente do sistema operacional:

Espero que tenha gostado dessa novidade! O foco principal é evitar que blocos/linhas de código repetidos, agilizar a vida dos desenvolvedores e otimizar cada vez mais tanto de tempo de compilação de um bloco de código.

Para maiores informações e sugestão de leitura:

Em caso de sugestão de melhorias no texto ou dúvidas, só entrar em contato!

--

--

Juliano Vaz
Apple Developer Academy | UFPE

Baiano, cientista da computação, educador, dev iOS. Além de antirracista, artista, aleatório e eclético.