Nos posts anteriores desta série a gente viu como representar dados assíncronos e como criar uma View genérica para exibir esses dados. O que a gente ainda não viu ainda é como é que a gente verdadeiramente usa na prática essas coisas nos nossos projetos. Neste post eu vou mostrar os princípios de uso disso …
Categoria: Swift
Views assíncronas genéricas
No artigo anterior nós vimos uma maneira de representar dados assíncronos por meio de uma enum com dois recursos interessantes: ela é genérica, de modo que pode se adaptar a qualquer tipo de dados; e ela tem um valor associado quando a informação está disponível. Vou copiar abaixo a definição dessa enum por conveniência: Nós …
Assincronia de dados em SwiftUI Views
Este post é o primeiro de uma sequência mais longa para mostrar algumas soluções interessantes para tratar de assincronia de dados em SwiftUI. Basicamente, o problema é quando a informação que precisamos exibir não está disponível exatamente no momento em que a tela é exibida: um caso muito comum é quando a gente faz uma …
Navegação rápida no editor do Xcode
Quando a gente cria um novo View Controller em um app no Xcode, a nova classe possui um comentário curioso: Tem umas instruções para a criação do método prepare(for:sender:), mas esse não é o assunto de hoje. Passei muito tempo sem prestar atenção nesse bloco, até que um dia achei estranho que ele começa com …
== (duplo igual), === (triplo igual) e o protocolo Equatable
TL;DR: O operador duplo-igual (==) diz se dois objetos são “iguais” ou “equivalentes”, e esse significado tem que ser implementado pelo programador (que faz isso através do protocolo Equatable). Por outro lado, o operador triplo-igual (===) diz se duas variáveis fazem referência ao mesmo objeto — algo que o Swift faz sem precisar do programador.
let vs. var em estruturas e classes
TL;DR: Instâncias constantes de estruturas (criadas com let) não podem ser modificadas de forma alguma, mesmo que algumas de suas propriedades sejam declaradas como var. Por outro lado, o uso de let em objetos não impede que esses objetos sejam modificados — apenas impede a atribuição a um outro objeto.
Extensões
TL;DR: Extensões podem ser usadas para criar novas funcionalidades em tipos existentes: adicionar métodos, propriedades computadas, inicializadores, e assim por diante. Isso pode ser muito conveniente quando precisamos dessas funcionalidades em tipos que não foram criados por nós, como String, Array, UIColor, UIView… O Swift oferece um recurso único para adicionar funcionalidades a tipos (classes, …
Um pouco sobre os guards
TL;DR: Tudo que o guard faz poderia ser feito com if. Mas os guards foram criados para melhorar a leitura do código, indicando um “posto de verificação” para os comandos seguintes: “Preciso que esta condição seja verdadeira, senão não é possível executar nada daqui pra frente.” O guard é uma dessas coisas em Swift que a …
Diferença entre classes e structs
TL;DR: Objetos (instâncias de classes) são sempre armazenadas por referência, portanto a declaração var b = a não cria uma cópia — ambas as variáveis se referem à mesma instância. Já com structs, cada variável se refere a uma única instância, portanto var b = a cria uma nova instância (uma cópia independente) de a.