Hex-Farben in Swift: Wie die Magie von #FF5733 funktioniert

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum ist #FF5733 nicht nur eine zufällige Zeichenfolge?

\n\n

Haben Sie sich jemals gefragt, was hinter der vertrauten Schreibweise #FF5733 in Ihrem Code steckt? Für die meisten Entwickler ist es einfach „eine Art Orange-Rosa-Farbe“. Aber wenn man tiefer gräbt, steckt hinter diesem sechsstelligen Code elegante Mathematik, Bitoperationen und eine Geschichte, die bis zu alten Monitoren und HTML-Spezifikationen zurückreicht.

\n\n

In diesem Artikel analysieren wir Hex-Farben in Swift von Grund auf. Sie erfahren, wie RGB-Kanäle funktionieren, warum das Hex-Format so beliebt ist und – am wichtigsten – wie Sie Ihr eigenes UIColor (oder Color für SwiftUI) schreiben, das hexadezimale Strings akzeptiert. Und ja, wir betrachten echten Code, den Sie noch heute verwenden können.

\n\n

Wenn Sie jemals auf Stack Overflow nach der Antwort auf die Frage „How to use hex color values in Swift“ gesucht haben – sind Sie hier genau richtig. Nur jetzt mit deutscher Übersetzung und tiefergehender Erklärung.

\n\n

Anatomie einer Hex-Farbe: Woher kommen diese Zahlen?

\n\n

Beginnen wir mit dem Einfachsten. Eine Farbe auf dem Bildschirm ist eine Kombination aus drei Grundkomponenten: Rot, Grün und Blau. Jede kann einen Wert von 0 bis 255 annehmen. Warum 255? Weil dies die maximale Zahl ist, die in einem Byte (8 Bit) gespeichert werden kann.

\n\n

Das Hex-Format ist einfach eine kompakte Möglichkeit, diese drei Zahlen darzustellen.

\n\n
    \n
  • #FF5733 wird in drei Paare aufgeteilt: FF, 57, 33.
  • \n
  • FF im Dezimalsystem = 255 (maximales Rot).
  • \n
  • 57 = 87 (Grün).
  • \n
  • 33 = 51 (Blau).
  • \n
  • Endgültige Farbe: RGB(255, 87, 51) – leuchtendes Korallenrot.
  • \n
\n\n

Das hexadezimale System (Basis 16) verwendet Ziffern von 0 bis 9 und Buchstaben von A bis F. Dies ermöglicht es, eine Zahl von 0 bis 255 mit nur zwei Zeichen darzustellen. Praktisch, oder?

\n\n

Warum ist Hex im Web und bei iOS so beliebt?

\n\n

Historisch stammen Hex-Codes aus dem Webdesign. Als CSS gerade erst begann, sich zu entwickeln, wurde #RRGGBB zum Standard für die Angabe von Farben. Swift und UIKit haben diese Tradition übernommen, jedoch mit einer Besonderheit: Es gibt keinen integrierten Parser für Hex-Strings in UIColor.

\n\n

Jeder iOS-Entwickler hat mindestens einmal eine Extension für UIColor geschrieben, die "#FF5733" in UIColor umwandelt. Dies wurde zu einer Art „Initiationsritual“. Und heute werden wir dieses Ritual gemeinsam durchlaufen.

\n\n

Schreiben unseres eigenen Hex-Parsers in Swift (Schritt für Schritt)

\n\n

Lassen Sie uns einen praktischen und sicheren Initialisierer für UIColor erstellen, der einen Hex-String akzeptiert. Wir werden jeden Schritt analysieren.

\n\n

Schritt 1: Grundlegende Struktur

\n\n
import UIKit\n\nextension UIColor {\n    convenience init?(hex: String) {\n        // Hier wird die Magie passieren\n    }\n}\n
\n\n

Wir verwenden convenience init? (fehlschlagbar), da der String ungültig sein könnte.

\n\n

Schritt 2: Bereinigen des Strings

\n\n

Benutzer könnten "#FF5733", "FF5733" oder sogar "0xFF5733" übergeben. Wir müssen alles Überflüssige entfernen.

\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

Schritt 3: Überprüfen der Länge

\n\n

Ein Standard-Hex-Code besteht aus 6 Zeichen (RRGGBB). Es gibt aber auch ein 8-Zeichen-Format (RRGGBBAA), wobei AA für den Alphakanal (Transparenz) steht. Wir unterstützen beide.

\n\n
guard hexString.count == 6 || hexString.count == 8 else {\n    return nil\n}\n
\n\n

Schritt 4: Parsen des Strings in Zahlen

\n\n

Jetzt kommt der interessante Teil. Wir müssen den String in eine hexadezimale Zahl umwandeln und dann die RGB-Komponenten daraus extrahieren.

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

Blogs

Buchempfehlungen