Cores hex em Swift: como funciona a magia #FF5733

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que #FF5733 não é apenas um conjunto aleatório de caracteres?

\n\n

Você 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.

\n\n

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.

\n\n

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\n

Anatomia de uma cor hex: de onde vêm esses números?

\n\n

Vamos 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\n

O 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
  • FF no 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
\n\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\n

Por que o hex é tão popular na web e no iOS?

\n\n

Historicamente, 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.

\n\n

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.

\n\n

Escrevendo nosso próprio analisador hex em Swift (passo a passo)

\n\n

Vamos criar um inicializador conveniente e seguro para UIColor que aceita uma string hex. Analisaremos cada etapa.

\n\n

Passo 1: Estrutura básica

\n\n
import UIKit\n\nextension UIColor {\n    convenience init?(hex: String) {\n        // A magia acontecerá aqui\n    }\n}\n
\n\n

Usamos convenience init? (inicializador falível) porque a string pode ser inválida.

\n\n

Passo 2: Limpando a string

\n\n

Os usuários podem passar "#FF5733", "FF5733" ou até "0xFF5733". Precisamos remover tudo que é desnecessário.

\n\n
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\n

Passo 3: Verificando o comprimento

\n\n

O 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\n
guard hexString.count == 6 || hexString.count == 8 else {\n    return nil\n}\n
\n\n

Passo 4: Analisando a string em números

\n\n

Agora a parte mais interessante. Precisamos transformar a string em um número hexadecimal e, em seguida, extrair dele os componentes RGB.

\n\n
guard let hexValue = UInt64(hexString, radix: 16) else {\n    ret                

Blogs

Book Recommendations