snippets

SwiftUI Text Color From Background

2026-02-18

Choose a readable Text color automatically based on the background color.

import SwiftUI
extension Color {
    func bestTextColor() -> Color {
        guard let components = self.resolve(in: .init()).cgColor.components else { return .black}
        guard components.count >= 3 else { return .black }
        let red: CGFloat = components[safe: 0]
        let green: CGFloat = components[safe: 1]
        let blue: CGFloat = components[safe: 2]
        
        // Relative luminance approximation for contrast decisions.
        let luminance = (0.299 * red) + (0.587 * green) + (0.114 * blue)
        return luminance > 0.6 ? .black : .white
    }
}

extension Array<CGFloat> {
    subscript(safe index: Int, default: CGFloat = 0) -> CGFloat {
        guard self.count > index else { return `default` }
        return self[index]
    }
}