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]
}
}