Por que #FF5733 não é apenas um conjunto aleatório de caracteres?
\n\nVocê já se perguntou o que está por trás da notação familiar #FF5733 no seu código? Para a maioria dos desenvolvedores, isso é apenas "alguma cor laranja-rosada". Mas se você cavar mais fundo, por trás deste código de seis dígitos há uma matemática elegante, operações bit a bit e uma história que remonta a monitores antigos e especificações HTML.
Neste artigo, vamos analisar cores hex em Swift do zero. Você aprenderá como funcionam os canais RGB, por que o formato hex é tão popular e — o mais importante — como escrever seu próprio UIColor (ou Color para SwiftUI) que aceita strings hexadecimais. E sim, veremos código real que você pode usar hoje mesmo.
Se você já procurou uma resposta para a pergunta "How to use hex color values in Swift" no Stack Overflow — você veio ao lugar certo. Só que agora com tradução para português e explicação aprofundada.
\n\nAnatomia de uma cor hex: de onde vêm esses números?
\n\nVamos começar pelo mais simples. Uma cor na tela é uma combinação de três componentes básicos: Red (vermelho), Green (verde) e Blue (azul). Cada um pode assumir um valor de 0 a 255. Por que 255? Porque é o número máximo que pode ser armazenado em um byte (8 bits).
\n\nO formato hex é simplesmente uma forma compacta de escrever esses três números.
\n\n- \n
#FF5733é dividido em três pares:FF,57,33. \n FFno sistema decimal = 255 (máximo de vermelho). \n 57= 87 (verde). \n 33= 51 (azul). \n - Cor resultante: RGB(255, 87, 51) — um coral vibrante. \n
O sistema hexadecimal (base 16) usa dígitos de 0 a 9 e letras de A a F. Isso permite escrever um número de 0 a 255 com apenas dois caracteres. Conveniente, não é?
\n\nPor que o hex é tão popular na web e no iOS?
\n\nHistoricamente, os códigos hex vieram do web design. Quando o CSS estava começando a se desenvolver, #RRGGBB tornou-se o padrão para especificar cores. Swift e UIKit adotaram essa tradição, mas com uma ressalva: não há um analisador embutido de strings hex em UIColor.
Todo desenvolvedor iOS já escreveu pelo menos uma vez uma extensão para UIColor que transforma "#FF5733" em UIColor. Isso se tornou uma espécie de "rito de iniciação". E hoje vamos passar por esse rito juntos.
Escrevendo nosso próprio analisador hex em Swift (passo a passo)
\n\nVamos criar um inicializador conveniente e seguro para UIColor que aceita uma string hex. Analisaremos cada etapa.
\n\nPasso 1: Estrutura básica
\n\nimport UIKit\n\nextension UIColor {\n convenience init?(hex: String) {\n // A magia acontecerá aqui\n }\n}\n\n\nUsamos convenience init? (inicializador falível) porque a string pode ser inválida.
Passo 2: Limpando a string
\n\nOs usuários podem passar "#FF5733", "FF5733" ou até "0xFF5733". Precisamos remover tudo que é desnecessário.
var hexString = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()\n\nif hexString.hasPrefix("#") {\n hexString.removeFirst()\n}\n\nif hexString.hasPrefix("0X") {\n hexString.removeFirst(2)\n}\n\n\nPasso 3: Verificando o comprimento
\n\nO código hex padrão tem 6 caracteres (RRGGBB). Mas também existe o formato de 8 caracteres (RRGGBBAA), onde AA é o canal alfa (transparência). Vamos suportar ambos.
\n\nguard hexString.count == 6 || hexString.count == 8 else {\n return nil\n}\n\n\nPasso 4: Analisando a string em números
\n\nAgora a parte mais interessante. Precisamos transformar a string em um número hexadecimal e, em seguida, extrair dele os componentes RGB.
\n\nguard let hexValue = UInt64(hexString, radix: 16) else {\n ret